Como bien sabes, hace algún tiempo liberé mi sistema de ventas para que sea gratuito para Windows. Si bien liberé el programa, no liberé el código. En este post te mostraré cómo obtener el código fuente y lo que te envío al comprarlo, así como los lenguajes con los que está hecho y todo ello.
Desde ahora te aclaro que te daré exactamente el mismo código fuente que uso para la versión que ya he publicado anteriormente.
El costo del código fuente es de 2000 MXN (pesos mexicanos). Para obtenerlo:
Todo lo que necesitas saber está en este post. Eso es lo que te entrego al comprarlo, así que te invito a leer todo esto minuciosamente.
Se utiliza la arquitectura cliente servidor. En el lado del servidor se usa a Go. Para el lado del cliente he usado el framework Vuetify que es conjunto de componentes para Vue.Js, así que obviamente también he usado Vue.js y JavaScript que es el lenguaje en sí.
La base de datos es SQLite, se puede portar a MySQL cambiando algunas funciones (y antes de que me preguntes, está en el readme, si quieres leerlo puedes leerlo sin problemas y hacerlo).
Nota importante: en ocasiones te vas a encontrar código que ya no sirve pero que no he removido. Por ejemplo, los ajustes de la impresora o del ticket ya no se usan, en su lugar se imprime desde el navegador web.
Conforme pasa el tiempo, los programas se actualizan y algunos dejan de ser compatibles con código que no fue escrito con esa versión. Para que no tengas problemas, te recomiendo que uses:
El código sigue funcionando al día de hoy, 20 de febrero de 2024. Para el caso de las versiones de Node, yo utilizo nvm para Windows.
Ya puedes usar este mismo código para compilar el punto de venta en Android, así que puedes usarlo en un teléfono o una tableta. Mira cómo se hace aquí.
Con este mismo código puedes tener un sistema de ventas gratis para la RPI:
Yo te enviaré un zip, mismo que contiene todo lo que ves, exceptuando las dependencias de Node, pues el archivo sería muy grande.
Listado de rutas de carpetas
El número de serie del volumen es
C:\USERS\PARZIBYTE\DESKTOP\TIENDAS-MASTER
└───tiendas-master
│ .babelrc
│ .editorconfig
│ .gitattributes
│ .gitignore
│ .postcssrc.js
│ compilar.py
│ index.html
│ package-lock.json
│ package.json
│ postcss.config.js
│ README.md
│
├───.idea
│ │ misc.xml
│ │ modules.xml
│ │ tiendas.iml
│ │ vcs.xml
│ │ workspace.xml
│ │
│ └───inspectionProfiles
│ Project_Default.xml
│
├───api
│ │ AjustesController.go
│ │ ApartadosController.go
│ │ AyudanteBaseDeDatos.go
│ │ BaseDeDatosNegocios.go
│ │ CajaController.go
│ │ Clases.go
│ │ ClientesController.go
│ │ Constantes.go
│ │ Correo.go
│ │ DatosGraficasController.go
│ │ Desarrollo.go
│ │ desarrollo.py
│ │ esquema_negocios.sql
│ │ esquema_negocios_sqlite.sql
│ │ esquema_spos.sql
│ │ esquema_spos_sqlite.sql
│ │ Full.go
│ │ Funciones.go
│ │ go.mod
│ │ go.sum
│ │ init.sql
│ │ main.go
│ │ makefile
│ │ NegociosController.go
│ │ PermisosController.go
│ │ Produccion.go
│ │ ProductosController.go
│ │ PruebaGratuita.go
│ │ rutas_admin.go
│ │ rutas_ajustes.go
│ │ rutas_apartados_abonos.go
│ │ rutas_caja.go
│ │ rutas_clientes.go
│ │ rutas_graficas.go
│ │ rutas_http.go
│ │ rutas_login.go
│ │ rutas_misc.go
│ │ rutas_negocios.go
│ │ rutas_permisos.go
│ │ rutas_productos.go
│ │ rutas_usuarios.go
│ │ rutas_utiles.go
│ │ rutas_ventas_contado.go
│ │ Sesion.go
│ │ sesiones.sqlite
│ │ UsuariosController.go
│ │ VentasContadoController.go
│ │
│ └───plantillas_correos
│ recordatorio_uso_sistema.html
│ verificar_cuenta.html
│
├───build
│ build.js
│ check-versions.js
│ logo.png
│ utils.js
│ vue-loader.conf.js
│ webpack.base.conf.js
│ webpack.dev.conf.js
│ webpack.prod.conf.js
│
├───config
│ dev.env.js
│ index.js
│ prod.env.js
│
├───src
│ │ .gitrepo
│ │ App.vue
│ │ constantes.js
│ │ funciones.js
│ │ http-common.js
│ │ main.js
│ │
│ ├───assets
│ │ │ logo.png
│ │ │
│ │ └───inicio
│ │ ajustes.png
│ │ bolsa-de-la-compra.png
│ │ codigo-de-barras.png
│ │ dinero.png
│ │ escudo.png
│ │ estadistica.png
│ │ logo.png
│ │ monedas.png
│ │ que-hacer.png
│ │ red.png
│ │ salpicadero.png
│ │ tareas.png
│ │
│ ├───components
│ │ │ AcercaDe.vue
│ │ │ DialogoPermisoDenegado.vue
│ │ │ EliminarNegocio.vue
│ │ │ Escritorio.vue
│ │ │ Inicio.vue
│ │ │ Login.vue
│ │ │ Logout.vue
│ │ │ Publicidad.vue
│ │ │ VerificarNegocio.vue
│ │ │
│ │ ├───Ajustes
│ │ │ Ajustes.vue
│ │ │ DatosNegocio.vue
│ │ │ Impresora.vue
│ │ │ Otros.vue
│ │ │
│ │ ├───Caja
│ │ │ │ Caja.vue
│ │ │ │ Egresos.vue
│ │ │ │ Ingresos.vue
│ │ │ │
│ │ │ └───Dialogos
│ │ │ Egreso.vue
│ │ │ Ingreso.vue
│ │ │
│ │ ├───Clientes
│ │ │ Clientes.vue
│ │ │ DialogoConfirmarEliminacion.vue
│ │ │ FormularioEditarCliente.vue
│ │ │ FormularioNuevoCliente.vue
│ │ │ Historial.vue
│ │ │ ListaDeClientes.vue
│ │ │
│ │ ├───Graficas
│ │ │ Graficas.vue
│ │ │ VentasAnio.vue
│ │ │ VentasMes.vue
│ │ │
│ │ ├───Inventario
│ │ │ DialogoAumentarExistencia.vue
│ │ │ DialogoConfirmarEliminacion.vue
│ │ │ DialogoRestarExistencia.vue
│ │ │ ExportarImportar.vue
│ │ │ FormularioEditarProducto.vue
│ │ │ FormularioNuevoProducto.vue
│ │ │ ListaDeProductos.vue
│ │ │ Productos.vue
│ │ │
│ │ ├───Otros
│ │ │ CodigosBarra.vue
│ │ │ DialogoCambiarProducto.vue
│ │ │ HacerInventario.vue
│ │ │
│ │ ├───Registro
│ │ │ DialogoNegocioExistente.vue
│ │ │ DialogoNegocioNoRegistrado.vue
│ │ │ DialogoNegocioRegistrado.vue
│ │ │ Registro.vue
│ │ │
│ │ ├───Reportes
│ │ │ │ Inventario.vue
│ │ │ │ ProductosMasVendidos.vue
│ │ │ │ ProductosMenosVendidos.vue
│ │ │ │ ProductosNuncaVendidos.vue
│ │ │ │ SeleccionadorFechas.vue
│ │ │ │ Stock.vue
│ │ │ │
│ │ │ ├───Caja
│ │ │ │ Caja.vue
│ │ │ │
│ │ │ └───Ventas
│ │ │ │ Abonos.vue
│ │ │ │ Apartado.vue
│ │ │ │ Contado.vue
│ │ │ │ ProductosApartados.vue
│ │ │ │
│ │ │ └───Apartados
│ │ │ CambiarFechaVencimiento.vue
│ │ │
│ │ ├───Tickets
│ │ │ Caja.vue
│ │ │ Encabezado.vue
│ │ │ Pie.vue
│ │ │ TicketAbono.vue
│ │ │ TicketApartado.vue
│ │ │ TicketVentaContado.vue
│ │ │
│ │ ├───Usuarios
│ │ │ DialogoNuevo.vue
│ │ │ Lista.vue
│ │ │ Permisos.vue
│ │ │ Usuarios.vue
│ │ │
│ │ └───Vender
│ │ AutocompletadoClientes.vue
│ │ AutocompletadoProductos.vue
│ │ DetallesClienteSeleccionado.vue
│ │ DialogoApartado.vue
│ │ DialogoBusquedaProducto.vue
│ │ DialogoCambiarPrecioVenta.vue
│ │ DialogoConfirmacionVaciarLista.vue
│ │ DialogoVentaContado.vue
│ │ ListaDeProductos.vue
│ │ SpeedDial.vue
│ │ Vender.vue
│ │
│ ├───fonts
│ │ material-icons.woff2
│ │ roboto-v18-latin-300.woff
│ │ roboto-v18-latin-300.woff2
│ │ roboto-v18-latin-500.woff
│ │ roboto-v18-latin-500.woff2
│ │ roboto-v18-latin-700.woff
│ │ roboto-v18-latin-700.woff2
│ │ roboto-v18-latin-regular.woff
│ │ roboto-v18-latin-regular.woff2
│ │ roboto-v18-latin.zip
│ │
│ └───router
│ index.js
│
└───static
.gitkeep
A continuación colocaré el contenido del archivo README.md que yo mismo escribí y con el que me guío cada vez que olvido cómo configurar el entorno. Ese archivo está en el código fuente pero igualmente lo adjunto aquí, pues ese es el único manual
En este vídeo te enseño a modificar el código fuente en general:
Aquí puedes aprender a modificar el símbolo monetario (signo de moneda):
En este vídeo te enseño a agregar un nuevo módulo al sistema de ventas:
En el siguiente vídeo puedes ver cómo subir este sistema a un VPS para usarlo en internet:
En la última actualización se hace una verificación de los archivos del lado del cliente para comprobar que no se han modificado. Si se quiere desactivar, hay que ir a las líneas 61 a 63 de main.go y removerlas.
Por otro lado, si esto se quiere usar hay que compilar el lado del cliente, calcular el sha512 de cada archivo, ir a checksum_archivos.go
, y ajustar nombres de archivo junto con el checksum
Se necesita contar con NPM y Go, además de GCC si se usa SQLite3 pues el mismo debe ser compilado. Por otro lado, si quieres que el makefile funcione, debes contar con make
Una vez que tengas el proyecto, abre una terminal en el mismo. Instala las dependencias de Node con:
npm install
Después de eso ya puedes iniciar el servidor de desarrollo con: npm run start
Ahora vamos al lado del servidor así que abre otra terminal y navega a este directorio pero entra a la carpeta api.
Si tienes make
ejecuta:
make
Y él se encargará de todo.
O en caso de que no tengas make
instala las dependencias de Go con: go mod tidy
Luego formatea el código (no es necesario, pero se ve bonito): gofmt -w .
Finalmente compila con: go build -o tiendas.exe -tags desarrollo
Y luego ejecuta tiendas.exe
Recuerda que debes estar dentro de api
. Compila para producción con: make prod
O si no cuentas con make, compila así: go build -o tiendas_prod_64.exe -tags produccion -ldflags "-H windowsgui"
Ahora copia los siguientes archivos a una carpeta limpia:
Y dentro de esa misma carpeta crea otra carpeta vacía llamada dist
Hasta el momento el árbol debe verse así:
λ tree /F
Listado de rutas de carpetas
El número de serie del volumen es
C:.
│ esquema_negocios_sqlite.sql
│ esquema_spos_sqlite.sql
│ init.sql
│ tiendas_prod_64.exe
│
└───dist
Recuerda que NO debes estar dentro de api.
Compila los archivos con: npm run build
Dentro de dist
(carpeta recién creada por el script, no te confundas con la que creaste anteriormente) mover la carpeta fonts
a css
de manera que su ruta ahora sea css/fonts
Entra a las carpetas js
y css
, busca los archivos que terminen en map
y elimínalos
Copia todo lo de dist
(TODO LO DE dist, no la carpeta en sí, sino su contenido) a la carpeta dist
que creaste anteriormente.
Ahora el directorio se debería ver así:
λ tree /F
Listado de rutas de carpetas
El número de serie del volumen es
C:.
│ esquema_negocios_sqlite.sql
│ esquema_spos_sqlite.sql
│ init.sql
│ tiendas_prod_64.exe
│
└───dist
│ index.html
│
├───css
│ │ app.9afe257e7d77a264e0675dacea965a46.css
│ │
│ └───fonts
│ material-icons.ac188f9.woff2
│ roboto-v18-latin-300.55536c8.woff2
│ roboto-v18-latin-300.a1471d1.woff
│ roboto-v18-latin-500.2854671.woff2
│ roboto-v18-latin-500.de8b743.woff
│ roboto-v18-latin-700.037d830.woff2
│ roboto-v18-latin-700.cf6613d.woff
│ roboto-v18-latin-regular.5d4aeb4.woff2
│ roboto-v18-latin-regular.bafb105.woff
│
├───img
│ ajustes.06556a3.png
│ bolsa-de-la-compra.8aefc13.png
│ dinero.280fff4.png
│ escudo.2db8426.png
│ estadistica.d676772.png
│ monedas.cc6526e.png
│ que-hacer.c1d47a0.png
│ red.524a30a.png
│ salpicadero.f66d1ab.png
│ tareas.ecd565c.png
│
└───js
app.6a416a79713a4b7ab346.js
manifest.5ebdb86dbeef19313db4.js
vendor.01fdaafe859388bfc024.js
Ahora solo resta distribuir la app. Cuando lo hagas, solo hay que ejecutar: tiendas_prod_64.exe
Y luego visitar http://localhost:2106/static/
Este sistema es compatible con MySQL, pero por ahora solo se usa pensando en SQLite3. Si quieres cambiar a MySQL aquí están los apuntes
Si se usa SQLite3 se debe usar la función STRFTIME
en lugar de DATE_FORMAT
usada en MySQL. Recuerda que hay diferencias, por ejemplo, para extraer el mes con SQLite3 es:
strftime("%m", fecha)
Mientras que con MySQL es:
date_format(fecha, "%m")
Por ahora se ha encontrado el uso de la función en:
En lugar de usar los archivos que terminan en sqlite.sql
deberían usarse solo los de .sql
, haciendo los cambios también en Constantes.go
Con SQLite3 no es necesario el create database...
pero con MySQL sí. Si vas a usar MySQL, además de los cambios de arriba, debes cambiar el if
en NegociosController.go:380
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios
no me deja importar una base de datos, esa funcion no esta habilitada para la version gratuita?
Ya he grabado un vídeo demostrando el funcionamiento. La única versión existente es la gratuita y funciona perfectamente: https://youtu.be/FfQW1RshMmY
¿Este punto de venta puede trabajar con una báscula?
Por supuesto
Si yo quisiera poner el sistema en unVPS que tengo que tendria que hacer
Hola. Tendría que seguir la siguiente guía: https://parzibyte.me/blog/2022/03/23/usar-sublime-pos-3-internet-nube/
estoy usando el programa pero necesito reinstalar la computadora como salvo los datos que e introducido
https://parzibyte.me/blog/2022/03/20/sublime-pos-actualizar-sistema-mantener-datos-existentes/
Hola te escribo desde Perú estoy interesado en el codigo fuente y la conexión a la BD. Puedes indicarme el precio?
Hola. Claro que sí, está en el mismo post que usted está comentando
Hola, tengo una consulta, la información que yo guardo, solo se almacena en la nube?, todos mis clientes que vaya a registrar?, queria saber ese detalle de mi información cargada. muchas gracias por su pronta respuesta
Hola. La información se guarda en el lugar configurado en el código fuente. Si usa el programa tal y como está publicado actualmente, la información no se guarda en la nube, se guarda localmente. Que el programa se abra en el navegador no significa que se necesite internet para guardar los datos
Hola, hice el pago para el codigo fuente de el POS ultima versión, en cuento tiempo maso menos me contactan?
Hola. Ya le he enviado mensaje al correo que dejó en el concepto de pago, por favor revise su bandeja de entrada.
hay algun correo en el que te pueda contactar?
Hola. Me puede contactar en https://parzibyte.me/#contacto
Hola, el sistema POS 3 sigue disponible?
Claro, lo puede descargar en su página de presentación: https://parzibyte.me/blog/2021/04/13/sistema-ventas-gratuito-windows/
Hola!
Una duda, veo que en el POS trae una nota que dice lo siguiente:
“Nota: puedes remover este mensaje y el pie de página al mismo tiempo que apoyas el desarrollo del software”
¿Como es posible quitarlo? Saludos!
Hola. Esa misma nota dice "Más información aquí" en donde, si hace clic, lo llevará a lo siguiente en donde puede ver cómo remover el pie de página: https://parzibyte.me/blog/2021/06/19/ayuda-soporte-sublime-pos-3/