Hoy vengo a presentar un software para realizar cotizaciones o presupuestos, el cual es totalmente gratuito de usar en la nube; así como open source. Es decir, aparte de que puedes usarlo en mi sitio, puedes descargarlo y modificarlo.
Características del software
No es la gran cosa, pero entre sus principales características encontramos las siguientes:
- Realizar cotizaciones o presupuestos
- Estimar el costo requerido, el cual se configura por cada servicio
- Calcular tiempo requerido por cada servicio
- Describir características y/o condiciones del trabajo
- Agregar clientes para ligarlos a las cotizaciones
- Imprimir la cotización o guardarla como PDF (esto depende del navegador la mayoría de veces)
- Multiusuario: cualquier usuario puede registrarse y usarlo, así de simple. Eso sí, las cotizaciones, servicios y características son separadas por usuario
- Totalmente open source
- Escrito con PHP, utiliza PDO para interactuar con la base de datos
- Base de datos MySQL
- Lado del cliente con Vue.JS y Bootstrap
- Mensaje de agradecimiento, presentación y pie totalmente configurables
Se me ocurre que puede servir tanto como para estudiantes que tienen que entregar un proyecto con PHP simple, así como para personas que necesitan un software como estos.
Voy a explicar cómo fue creado, en dónde se puede probar y también dónde se puede leer el código fuente.
Una introducción técnica
Este sistema está creado con PHP utilizando PDO para conectar con MySQL. Usé lo mismo que explico en Introducción a PHP con PDO y MySQL, o en la creación de un pequeño sistema de ventas.
En el lado del cliente utiliza a Bootstrap 4 y Vue.Js en su versión 2. Para convertir los minutos a un tiempo legible por los humanos, utilizo lo que se vio aquí. Por otro lado, para formatear el dinero utilizo la función que convierte números a dinero que publiqué anteriormente (lo puse rápidamente como filtro gracias a la simplicidad de Vue).
La sesión de PHP es manejada por un, valga la redundancia, manejador o handler propio de sesiones, el cual utiliza MySQL para la persistencia y que publiqué hace algún tiempo.
Ah, olvido decir que no se utiliza ningún framework para PHP; es el lenguaje en su simplicidad absoluta.
Hablando de las contraseñas, las cifro con bcrypt (mira este tutorial para hashear en PHP) pero antes de ello las convierto en una cadena de longitud fija con md5 (para evitar poner un límite en la longitud de las mismas). Así, aunque MD5 es rompible por un ataque de diccionario, bcrypt no, porque usa sal.
Sobre la seguridad puedo decir que utilizo un token CSRF para evitar ataques CSRF, y para comprobar el token utilizo hash_equals
en lugar de una simple comparación; todo esto para mitigar ataques de temporización.
Demostración y pruebas del software
Puedes probar la aplicación web haciendo click aquí o entrando en bit.ly/cotizaciones_online. Funciona perfectamente; regístrate con tu correo electrónico y luego inicia sesión.
El software es web, y por lo tanto multiplataforma. Puedes acceder a él desde una tableta, teléfono o computadora desde cualquier parte del mundo. Aparte de eso, gracias al diseño responsivo se adapta a cualquier pantalla.
La siguiente captura es de mi teléfono:
Un PDF que fue generado (la impresión sale casi idéntica) es el que se puede ver aquí.
Hablar es de mal gusto, muéstrame el código
Bueno, ya hablé mucho. El código fuente está en GitHub bajo la licencia MIT. En resumen puedes hacer lo que quieras con el software, incluso venderlo. Eso sí, no te doy garantía de nada; pero bueno, si quieres ver la licencia puedes leerla en el repositorio.
Motivación
Lo que me motivó a hacerlo es que ya estaba harto de usar Microsoft Word; porque aunque hay plantillas excelentes ninguna es una herramienta ad-hoc (o como se les diga, no sé si es el término correcto).
Aparte de ello, no podía acceder a la plantilla si no tenía mi computadora presente, y sobre todo, no calculaba cosas automáticamente.
Instalación
He creado un vídeo para que sepas cómo instalar el software en tu entorno local o servidor:
El futuro
Conforme pase el tiempo, lo iré puliendo un poco más (me ayudarías si lo compartes y usas).
Eres libre de dejar comentarios para mejorarlo, o reportar errores. Encontrarás más información en la página Acerca de del sistema.
excelente proyecto estoy intentando modificarlo agregando otras tablas y todo bien el detalle es que al querer modificar navegacion.php y agregarle mas opciones me sale este error [ warning cannot modify header information – headers already sent by (output started at ] podira decirme el porque se produce y como lo puedo solucionar de antemano muchas gracias 🙂
Hola. Gracias por sus comentarios. Si tiene alguna consulta o duda, solicitud de creación de un programa, solicitud de vídeo o solicitud de cambio de software estoy para servirle en https://parzibyte.me/#contacto
Saludos!
para subirlo subirlo en linea que se debe de modificar disculpe y muchas gracias
Hola. Gracias por sus comentarios. Si tiene alguna consulta, solicitud de creación de un programa o solicitud de cambio de software estoy para servirle en https://parzibyte.me/#contacto
Saludos!
Hola que tal,
Me parece genial este sistema y muy fácil de entenderlo, lo he probado y le he realizado algunas modificaciones como por ejemplo en vez de colocar servicios voy a cotizar productos, para esto he creado una nueva tabla y un nuevo controlador, sin embargo al seleccionar el producto quiero que el valor del mismo lo pinte en un campo texto de valor pero no puedo hacerlo, tienes una función o un metodo que realice este paso?
Gracias de antemano y te felicito por esta pagina
Hola. Gracias por sus comentarios. Si tiene alguna consulta con gusto lo atiendo en https://parzibyte.me/#contacto
Saludos!
que tal,
me marca este error al dar login veo q es cuestion de redireccionamiento porque si guarda la sesion y si me voy manual en el url me funciona sin problemas, que podra ser?
Cannot modify header information – headers already sent by (output started at /srv/disk3/3047164/…/encabezado.php:1) in /srv/disk3/3047164/…/Utiles.php on line 7
Hola. Le invito a ver el vídeo de instalación, puede que le haya faltado crear una tabla o algo así.
Saludos 🙂
Hola Luis, gracias por tu respuesta. Te respondo por acá porque no puedo responder a tu comentario.
Yo lo estoy instalando en un servidor externo.
[url]
Ahí te dejo la dirección donde podes probar el error que te comento. El problema del envío de formulario ocurre cuando ya con un usuario registrado intento ingresar a la presupuestadora en sí. La pantalla queda en blanco y no se carga lo que sería la parte principal. Tengo que actualizar para que cargue. Ocurre lo mismo al cerrar sesión.
Muchas gracias por tu respuesta nuevamente
Saludos 🙂 !
Hola. Tal vez se saltó un paso en la instalación del sistema; por favor asegúrese de que ha seguido todos los pasos de la instalación. Entiendo que es el mismo software, pero como puede ver, en mi servidor funciona perfectamente.
Igualmente si quiere una ayuda personalizada puede contactarme en https://parzibyte.me
Saludos 🙂
Buenas! Un trabajo excelente y muy útil! ya lo instalé y lo estoy intentando probar pero tengo un problema y es con el envío de formulario. Cuando quiero ingresar en la sección principal o cuando quiero desloguearme, me queda la página en blanco y por consola me aparece el mensaje
“Confirmar reenvío del formulario. Esta página web necesita los datos introducidos anteriormente para mostrarse correctamente. Puedes volver a enviar los datos, pero se repetirán las acciones que haya realizado la página.
Pulsa el botón de actualización de página para que se vuelvan a enviar los datos necesarios para cargar la página.
ERR_CACHE_MISS”
Al actualizar la página se muestra el contenido, pero quería saber si me podías guiar en donde está el error o donde puedo solucionarlo.
Un saludo y gracias de antemano!
Hola. Yo acabo de probar, entré a la página (https://parzibyte.me/apps/cotizaciones/?p=cotizaciones) y luego cerré sesión, pero no me apareció el error. Puede usted decirme la manera de replicar el error, así puedo analizarlo?
Saludos 🙂
Me lanza ese error, no encuentro ese archivo autoload.php
Fatal error: require(): Failed opening required ‘C:\xampp\htdocs\sistema_pagos_php/vendor/autoload.php’
Hola. Me estás mencionando el error del sistema de pagos, pero este sistema es de cotizaciones. Por favor publica tu comentario en el post correspondiente.
Saludos 🙂
perdona se dice buen día que mal educado soy, gracias por la ayuda y muchas gracias por compartir tus conocimientos, gracias nuevamente y este comentario debería ser mi inicio, perdón.
ahora si viene la pregunta que te realice arriba
el contenido de mi env.php es:
;
; URL base del proyecto, algo como https://sitio.com
BASE_URL = “http://127.0.0.1/coTatiana/”
;BASE_URL = “localhost/coTatiana”
USUARIO_MYSQL = “root”
PASS_MYSQL = “”
NOMBRE_BD_MYSQL = “cotizaciones”
HOST_MYSQL = “127.0.0.1”
USUARIO_MYSQL_SESION = “root”
PASS_MYSQL_SESION = “”
NOMBRE_BD_MYSQL_SESION = “cotizaciones”
HOST_MYSQL_SESION = “127.0.0.1”
; De Google Analytics
;ID_SEGUIMIENTO = “”
; Publicidad
AD_CLIENT = “”
AD_SLOT = “”
y de acuerdo a una de tus respuestas:
Hola amigo, el error te lo está diciendo todo: no existe la clave BASE_URL en el archivo de configuración. Debes crear un archivo llamado env.php que se parezca a env.ejemplo.php y después llenarlo con los datos correctos, incluyendo BASE_URL que sería la URL en donde estará tu proyecto.
Saludos.
entonces que tengo mal?, porque el archivo env.php lo puse tal cual con mi configuracion y a mi me sale este error (te comento que le quite espacion en blanco a los archivos y lo tabule)
escribo variables
array(11) { [“BASE_URL”]=> string(27) “http://127.0.0.1/coTatiana/” [“USUARIO_MYSQL”]=> string(4) “root” [“PASS_MYSQL”]=> string(12) “,2020,hidra,” [“NOMBRE_BD_MYSQL”]=> string(12) “cotizaciones” [“HOST_MYSQL”]=> string(9) “127.0.0.1” [“USUARIO_MYSQL_SESION”]=> string(4) “root” [“PASS_MYSQL_SESION”]=> string(12) “,2020,hidra,” [“NOMBRE_BD_MYSQL_SESION”]=> string(12) “cotizaciones” [“HOST_MYSQL_SESION”]=> string(9) “127.0.0.1” [“AD_CLIENT”]=> string(0) “” [“AD_SLOT”]=> string(0) “” } localhost
array(11) { [“BASE_URL”]=> string(27) “http://127.0.0.1/coTatiana/” [“USUARIO_MYSQL”]=> string(4) “root” [“PASS_MYSQL”]=> string(12) “,2020,hidra,” [“NOMBRE_BD_MYSQL”]=> string(12) “cotizaciones” [“HOST_MYSQL”]=> string(9) “127.0.0.1” [“USUARIO_MYSQL_SESION”]=> string(4) “root” [“PASS_MYSQL_SESION”]=> string(12) “,2020,hidra,” [“NOMBRE_BD_MYSQL_SESION”]=> string(12) “cotizaciones” [“HOST_MYSQL_SESION”]=> string(9) “127.0.0.1” [“AD_CLIENT”]=> string(0) “” [“AD_SLOT”]=> string(0) “” }
inicia error
Warning: Uncaught Exception: No existe la clave (localhost) en el archivo de configuración in D:\VServ\www\coTatiana\Comun.php:25 Stack trace: #0 D:\VServ\www\coTatiana\BD.php(17): Comun::env(‘localhost’) #1 D:\VServ\www\coTatiana\Sesion.php(24): BD::obtenerParaSesion() #2 [internal function]: Sesion->open(”, ‘PHPSESSID’) #3 D:\VServ\www\coTatiana\SesionService.php(22): session_start() #4 D:\VServ\www\coTatiana\SesionService.php(33): SesionService::init() #5 D:\VServ\www\coTatiana\index.php(49): SesionService::obtenerIdUsuarioLogueado() #6 {main} thrown in D:\VServ\www\coTatiana\Comun.php on line 25
Fatal error: session_start(): Failed to initialize storage module: user (path: ) in D:\VServ\www\coTatiana\SesionService.php on line 22
No veo la necesidad de modificar la estructura del archivo de entorno; recomiendo dejarlo como está. En el post dejé un vídeo de instalación.
hola buenas tardes pude ver el buen trabajo que hizo pero al subir mi cotizador en linea me sale este error [url] me puede ayudar, por favor
Hola, claro que sí. Dice que no existe la clave ID_SEGUIMIENTO en el archivo Comun.php, esto quiere decir que en el archivo de configuración Env debe poner la clave de seguimiento, o simplemente remover en el index la parte que inserta el script de Google Analytics.
Saludos 🙂
Hola, Me sale este error :
Parse error: syntax error, unexpected ‘?’ in C:\xampp\htdocs\cotizaciones\index.php on line 54
Hola. Es por el operador ??, actualiza tu versión de php o cambia a usar operadores ternarios o if. Más información: https://parzibyte.me/blog/2018/05/21/operador-fusion-null-coalesce-php/
muchísimas gracias por la ayuda, pude resolver el “problema”, pero ahora no carga el login… =/
Hola, si te fijas, no existe la clave ID_SEGUIMIENTO en el archivo env (dale ctrl + u en la página), coloca la clave o remueve esa parte de código.
Saludos
Hola! soy nuevo en esto de programación y estoy tratando de montar su sistema pero me sale el siguiente error:”Fatal error: Uncaught Exception: No existe la clave (BASE_URL) en el archivo de configuración in C:\xampp\htdocs\cotizaciones\Comun.php:27 Stack trace: #0 C:\xampp\htdocs\cotizaciones\index.php(17): Comun::env(‘BASE_URL’) #1 {main} thrown in C:\xampp\htdocs\cotizaciones\Comun.php on line 27″, como se podria solucionar, de antemano te lo agradezco?
Hola amigo, el error te lo está diciendo todo: no existe la clave
BASE_URL
en el archivo de configuración. Debes crear un archivo llamadoenv.php
que se parezca aenv.ejemplo.php
y después llenarlo con los datos correctos, incluyendoBASE_URL
que sería la URL en donde estará tu proyecto.Saludos
hola, ayuda ya subi la base de datos ya realize los cambios pertinentes en env.php pero aun asi no generar error.
********************************
¡Objeto no localizado!
No se ha localizado la URL solicitada en este servidor. Si usted ha introducido la URL manualmente, por favor revise su ortografía e inténtelo de nuevo.
Si usted cree que esto es un error del servidor, por favor comuníqueselo al administrador del portal.
Error 404
localhost
Apache/2.4.39 (Win64) OpenSSL/1.0.2s PHP/7.1.30
Hola. Este error es porque el servidor no encuentra el archivo que buscas (asegúrate de escribir la ruta exacta) y no tiene que ver con el programa. Recuerda que en el env.php también debes configurar la ruta, y subir el archivo .htaccess
También puedo brindarte ayuda personalizada si así lo requieres: https://parzibyte.me/blog/contrataciones-ayuda/
hola, al intentar probarlo desde mi wamp me tira este error:
( ! ) Fatal error: Uncaught Exception: El archivo de configuración (C:\wamp64\www\cotizar/env.php) no existe in C:\wamp64\www\cotizar\Comun.php on line 19
( ! ) Exception: El archivo de configuración (C:\wamp64\www\cotizar/env.php) no existe in C:\wamp64\www\cotizar\Comun.php on line 19
y note que en el zip que baje no esta el archivo env.php.
Muchas gracias por tu colaboración!
Hola. Ese comportamiento es intencional, pues el archivo env.php guarda las contraseñas y no debe sincronizarse.
Lo que tienes que hacer es crear ese archivo, tomando como referencia el env.ejemplo.php, copia y pega, coloca tus credenciales de acceso y listo.
No olvides seguirme en mis redes sociales y suscribirte
Buenas tardes, me parece un sistema genial. Crees posible que me pudieras ayudar a realizar una modificación para la cotización de productos tomando en cuenta variables de peso, distancia de entrega, etc. Saludos
Claro que es posible, contáctame en https://parzibyte.me/blog/contacto/ y mándame todos los detalles de lo que necesitas para que podamos comenzar a trabajar cuanto antes.
Saludos
Pingback: Crear documentos de Word con PHP y PHPWord - Parzibyte's blog
No puedo registrar mi correo para probar el software
Hola. He revisado la base de datos y tu correo (br***.aaa**@gmail.com) ya estaba registrado así que lo eliminé. Intenta registrarte de nuevo, saludos 🙂
saludos buen trabajo la verdad, quisiera saber porque la BD no se instala subo el esquema.sql , en phpadmin pero da error porque ?
No lo sé, pero si pones el mensaje de error tal vez podamos averiguarlo. También asegúrate de que la base de datos exista con ese nombre, y que tienes permiso para manipularla
Pingback: Plantilla inicial de Bootstrap 4 (starter template) - Parzibyte's blog
Pingback: Login con base de datos de MySQL en PHP - Parzibyte's blog
Pingback: PHP y PDO parte 2: iterar con cursor y comprobar si elemento existe - Parzibyte's blog
Pingback: Unir o combinar archivos PDF con PHP y libmergepdf - Parzibyte's blog