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.

Sistema web para cotizaciones y presupuestos

Sistema web para cotizaciones y presupuestos

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.

Relacionado:  Anotaciones para rutas en Symfony

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:

App web para cotizaciones, presupuestos y costos en un teléfono Android

App web para cotizaciones, presupuestos y costos en un teléfono Android

Un PDF que fue generado (la impresión sale casi idéntica) es el que se puede ver aquí.

Relacionado:  Cómo obtener un hosting gratuito con dominio, PHP 7, MySQL y cuentas FTP

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.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 704 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

34 Comments

Ricardo · agosto 28, 2020 a las 10:19 am

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

    parzibyte · agosto 28, 2020 a las 11:19 am

    Hola. Le invito a ver el vídeo de instalación, puede que le haya faltado crear una tabla o algo así.
    Saludos 🙂

Mauricio · agosto 20, 2020 a las 5:56 am

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 🙂 !

    parzibyte · agosto 20, 2020 a las 11:11 am

    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 🙂

Mauricio · agosto 18, 2020 a las 10:41 am

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!

Bladimir · junio 3, 2020 a las 1:04 pm

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’

    parzibyte · junio 3, 2020 a las 1:29 pm

    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 🙂

juanjava · mayo 17, 2020 a las 8:25 am

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

juanjava · mayo 17, 2020 a las 8:20 am

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

    parzibyte · mayo 17, 2020 a las 12:46 pm

    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.

Elizabeth Laguna Almaguer · febrero 11, 2020 a las 6:02 pm

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

    parzibyte · febrero 11, 2020 a las 6:20 pm

    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 🙂

eduardo · febrero 4, 2020 a las 12:29 pm

Hola, Me sale este error :

Parse error: syntax error, unexpected ‘?’ in C:\xampp\htdocs\cotizaciones\index.php on line 54

Sebastian · noviembre 16, 2019 a las 12:08 pm

muchísimas gracias por la ayuda, pude resolver el “problema”, pero ahora no carga el login… =/

    parzibyte · noviembre 16, 2019 a las 9:51 pm

    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

Sebastian · noviembre 13, 2019 a las 2:28 pm

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?

    parzibyte · noviembre 15, 2019 a las 10:31 am

    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

jorge mendez · agosto 15, 2019 a las 3:57 pm

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

    parzibyte · agosto 15, 2019 a las 5:48 pm

    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/

Cristian · agosto 9, 2019 a las 1:58 pm

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!

    parzibyte · agosto 9, 2019 a las 2:04 pm

    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

Rafael Corona Herrera · julio 3, 2019 a las 9:24 am

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

Brenda · junio 5, 2019 a las 10:50 am

No puedo registrar mi correo para probar el software

    parzibyte · junio 5, 2019 a las 11:02 am

    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 🙂

    luna · junio 5, 2019 a las 4:10 pm

    saludos buen trabajo la verdad, quisiera saber porque la BD no se instala subo el esquema.sql , en phpadmin pero da error porque ?

    parzibyte · junio 5, 2019 a las 4:27 pm

    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

Crear documentos de Word con PHP y PHPWord - Parzibyte's blog · junio 13, 2019 a las 6:43 pm

[…] El resultado del ejemplo se puede ver aquí. Y si te lo preguntas, el texto es de un post de un sistema de cotizaciones. […]

Plantilla inicial de Bootstrap 4 (starter template) - Parzibyte's blog · mayo 9, 2019 a las 9:53 am

[…] (y su versión anterior, la 3) es el framework CSS más usado en el desarrollo web (por ejemplo, el sistema de cotizaciones lo […]

Login con base de datos de MySQL en PHP - Parzibyte's blog · marzo 8, 2019 a las 5:02 am

[…] Algo más complejo que sí usa sesiones es un sistema de cotizaciones web. […]

PHP y PDO parte 2: iterar con cursor y comprobar si elemento existe - Parzibyte's blog · febrero 16, 2019 a las 1:01 pm

[…] Sistema web de cotizaciones open source […]

Unir o combinar archivos PDF con PHP y libmergepdf - Parzibyte's blog · febrero 4, 2019 a las 9:01 am

[…] Por cierto, un PDF es sobre mi página personal y el otro es de un sistema de cotizaciones gratuito. […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: