Revista Blog

Sistema Generador de Facturas en Python

Por Mauricio Sevilla @configuroweb

Este aplicación totalmente gratuita es un Sistema Generador de Facturas en Python, su implementación es bastante sencilla y práctica, podría servir para implementarse en un sistema más complejo, con Django.

Este software desarrollado en Python incluye una base de datos en SQLITE3, desde donde se proporcionan los datos de los productos y los datos de quien realiza la venta.

En este software realizas la elección del producto, el sistema te lleva a un formulario sencillo donde ingresas la información de cliente y el monto con el que vas a realizar el pago. Posterior a esto le das enviar y te aparece una tabla con la información de la factura.

En el apartado de factura hay un botón que dice generar PDF, de ese modo se imprime la factura. Este software es fácil de parametrizar desde SQLITE3, la siguiente es la estructura de la base de datos:

CREATE TABLE IF NOT EXISTS "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, 
"applied" datetime NOT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE IF NOT EXISTS "auth_group_permissions" 
("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "group_id" integer NOT NULL REFERENCES "auth_group" ("id") DEFERRABLE INITIALLY DEFERRED, "permission_id" 
integer NOT NULL REFERENCES "auth_permission" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "auth_user_groups" ("id" 
integer NOT NULL PRIMARY KEY AUTOINCREMENT, "user_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED, "group_id" integer NOT NULL REFERENCES "auth_group" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "auth_user_user_permissions" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "user_id" integer NOT NULL REFERENCES "auth_user" 
("id") DEFERRABLE INITIALLY DEFERRED, "permission_id" integer NOT NULL REFERENCES "auth_permission" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE UNIQUE INDEX "auth_group_permissions_group_id_permission_id_0cd325b0_uniq" ON "auth_group_permissions" ("group_id", "permission_id");
CREATE INDEX "auth_group_permissions_group_id_b120cbf9" ON "auth_group_permissions" ("group_id");       
CREATE INDEX "auth_group_permissions_permission_id_84c5c92e" ON "auth_group_permissions" ("permission_id");
CREATE UNIQUE INDEX "auth_user_groups_user_id_group_id_94350c0c_uniq" ON "auth_user_groups" ("user_id", 
"group_id");
CREATE INDEX "auth_user_groups_user_id_6a12ed8b" ON 
"auth_user_groups" ("user_id");
CREATE INDEX "auth_user_groups_group_id_97559544" ON "auth_user_groups" ("group_id");
CREATE UNIQUE INDEX "auth_user_user_permissions_user_id_permission_id_14a6b632_uniq" ON "auth_user_user_permissions" ("user_id", "permission_id");
CREATE INDEX "auth_user_user_permissions_user_id_a95ead1b" ON "auth_user_user_permissions" ("user_id"); 
CREATE INDEX "auth_user_user_permissions_permission_id_1fbb5f2c" ON "auth_user_user_permissions" ("permission_id");
CREATE TABLE IF NOT EXISTS "django_admin_log" ("id" 
integer NOT NULL PRIMARY KEY AUTOINCREMENT, "action_time" datetime NOT NULL, "object_id" text NULL, "object_repr" varchar(200) NOT NULL, "change_message" text NOT NULL, "content_type_id" integer NULL REFERENCES "django_content_type" ("id") DEFERRABLE INITIALLY DEFERRED, "user_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED, "action_flag" smallint unsigned NOT NULL CHECK ("action_flag" >= 0));
CREATE INDEX "django_admin_log_content_type_id_c4bce8eb" ON "django_admin_log" ("content_type_id");     
CREATE INDEX "django_admin_log_user_id_c564eba6" ON 
"django_admin_log" ("user_id");
CREATE TABLE IF NOT EXISTS "django_content_type" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL);
CREATE UNIQUE INDEX "django_content_type_app_label_model_76bd3d3b_uniq" ON "django_content_type" ("app_label", "model");
CREATE TABLE IF NOT EXISTS "auth_permission" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "content_type_id" integer NOT NULL REFERENCES "django_content_type" ("id") DEFERRABLE INITIALLY DEFERRED, "codename" varchar(100) NOT NULL, "name" varchar(255) NOT NULL);
CREATE UNIQUE INDEX "auth_permission_content_type_id_codename_01ab375a_uniq" ON "auth_permission" ("content_type_id", "codename");
CREATE INDEX "auth_permission_content_type_id_2f476e4b" ON "auth_permission" ("content_type_id");       
CREATE TABLE IF NOT EXISTS "auth_group" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(150) NOT NULL UNIQUE);
CREATE TABLE IF NOT EXISTS "django_session" ("session_key" varchar(40) NOT NULL PRIMARY KEY, "session_data" text NOT NULL, "expire_date" datetime NOT NULL);
CREATE INDEX "django_session_expire_date_a5c62663" ON "django_session" ("expire_date");
CREATE TABLE IF NOT EXISTS "app_producat" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(100) NOT NULL, "dis" text NOT NULL, "price" varchar(100) NOT NULL, "img" varchar(100) NOT NULL);     
CREATE TABLE IF NOT EXISTS "auth_user" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "password" varchar(128) NOT NULL, "last_login" datetime NULL, "is_superuser" bool NOT NULL, "username" varchar(150) NOT NULL UNIQUE, "last_name" varchar(150) NOT NULL, "email" varchar(254) NOT NULL, "is_staff" bool NOT NULL, "is_active" bool NOT NULL, "date_joined" datetime 
NOT NULL, "first_name" varchar(150) NOT NULL);      
CREATE TABLE IF NOT EXISTS "app_buyer" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(50) NOT NULL, "address" varchar(150) NOT NULL, "phone" integer NOT NULL, "purchase_date" date NOT NULL);
CREATE TABLE IF NOT EXISTS "app_seller" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(50) NOT NULL, "address" varchar(150) NOT NULL, "phone" integer NOT NULL, "date" date NOT NULL);

Puesta a Punto del Sistema Generador de Facturas en Python en un Servidor Local

Es muy importante instalar Python en tu ordenador, se recomienda que Python se incluya en la PATH de Windows, para poderlo ejecutar desde cualquier ubicación.

En el siguiente vídeo se explica el proceso si tienes cualquier duda, te puedes apoyar en el siguiente vídeo:

Visual Studio Code lo puedes descargar en el siguiente enlace:

https://code.visualstudio.com/

Instalación de Git

Git es un gestor de repositorios con el que se puede trabajar de manera avanzada con nuestro proceso de desarrollo, por este motivo se recomienda la instalación Git para adelantar el proceso de la puesta a punto de la aplicación en un servidor local.

Descarga del Sistema Generador de Facturas en Python de GitHub

La aplicación es de libre distribución y la puedes descargar en el siguiente enlace:

Sistema Generador de Facturas en Python

Con la instalación de las aplicaciones listadas anteriormente, Python, VS Code y Git, primero se debe abrir VS Code y ubicarte donde quieras descargar el proyecto. Posteriormente en Visual Studio Code, presionas, View y luego Terminal, confirma que la consola que te abra sea la de Git Bash la nativa de Git, te debe aparecer letras en color.

Posterior a pulsar en View y Terminal, copia y pega el siguiente código para que descargues el proyecto:

git clone https://github.com/configuroweb/factura-python.git

Se creará una nueva carpeta en la ubicación que hayas elegido con el nombre factura-python y dentro de esta carpeta estará ya el proyecto.

Ejecución de la aplicación en tu servidor local

Después de que el proyecto se descargue ya no necesitarás Git Bash, cambia la consola por Command Prompt y desde ahí ejecuta el siguiente comando:

pip install -r requirements.txt

Con este script se instalarán todas la aplicaciones que requiere el Sistema Generador de Facturas en Python con Django para funcionar correctamente y son las siguientes:

appdirs==1.4.4
arabic-reshaper==2.1.3
asgiref==3.5.2
astroid==2.4.1
autopep8==1.5.7
colorama==0.4.3
distlib==0.3.2
Django==4.1.2
django-crispy-forms==1.13.0
django-easy-pdf==0.1.1
filelock==3.0.12
future==0.18.2
html5lib==1.1
Pillow==9.2.0
pycodestyle==2.7.0
pylint==2.5.2
pytz==2020.4
reportlab==3.6.1
six==1.16.0
sqlparse==0.4.1
toml==0.10.1
virtualenv==20.4.7
virtualenvwrapper-win==1.2.6
wrapt==1.12.1
xhtml2pdf==0.2.5

Si falla este proceso, si lanza un error puede ser por las versiones, lo que debes hacer es instalar aplicación por aplicación con pip install y el nombre por ejemplo Django, el comando sería al siguiente:

pip install Django

El sistema instalará en el proyecto la última versión de Django, muy probablemente sin problemas de compatibilidad.

Después de que hayas hecho este proceso exitosamente, debes ejecutar el archivo manage.py y ejecutar la opción runserver, el comando es el siguiente:

python manage.py runserver

En este punto en la siguiente dirección web estará funcionando la aplicación sin inconvenientes:

http://127.0.0.1:8000/

Si requieres hacer algún cambio en esta aplicación, subirla a un host, o necesitas una aplicación a medida, me puedes contactar en el siguiente enlace de Whatsapp:

https://configuroweb.com/WhatsappMessenger

Quedo al pendiente de cualquier novedad !!


Volver a la Portada de Logo Paperblog