0% encontró este documento útil (0 votos)
29 vistas64 páginas

Manual del Programador: Marketmate Python

Manual para aprender a programar para principiantes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas64 páginas

Manual del Programador: Marketmate Python

Manual para aprender a programar para principiantes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Manual

Del
Programador 1

Proyecto: Marketmate
Autores: Leonardo Padilla
Janny Pincay
Miguel Ángel Quimis
Harold Velasco
Fecha: 19/02/2024
1c Desarrollo de Software
INDICE

Introducción……………………………………………3
Controllers……………………………………………...4
Database, Conexión……………………………………15
Models…………………………………………………17
View……………………………………………………47 2
UI………………………………………………………58
Main……………………………………………………62
Introducción

Exploraremos la sintaxis limpia y legible de Python. Desde variables


y tipos de datos hasta estructuras de control de flujo como bucles y
condicionales, este capítulo te proporcionará una base sólida para
construir programas efectivos.

Exploraremos las estructuras de datos fundamentales en Python.

Desde listas que te permitirán almacenar secuencias de elementos 3


hasta diccionarios que te facilitarán la manipulación de datos
estructurados. Este manual te acompañará en tu viaje con Python,
proporcionándote las herramientas y conocimientos necesarios para
convertirte en un programador competente.

¡Prepárate para explorar, aprender y disfrutar programando con


Python!
CONTROLLERS
ClientController

Class ClientController

La clase ClientController se utiliza para manejar operaciones relacionadas con clientes


en un sistema. Este manual proporciona una descripción detallada de cada método dentro
de la clase.

Método __init__(self)

• Descripción: Constructor de la clase ClientController.


• Parámetros: No tiene parámetros.
• Funcionalidad: No realiza ninguna operación específica en este caso.

4
Método create(self)

• Descripción: Este método se utiliza para crear un nuevo cliente.


• Parámetros: No tiene parámetros explícitos, pero solicita información al usuario
mediante la entrada estándar.
• Funcionalidad:
o Solicita información como la identificación, nombres, apellidos, teléfono,
dirección y ciudad del cliente.
o Crea una instancia de la clase Cliente con la información proporcionada.
o Guarda la instancia del cliente.
Método search_by_identification (self, identification)

• Descripción: Este método busca un cliente por su identificación.


• Parámetros:
o identificación: Identificación del cliente que se está buscando.
• Funcionalidad:
o Busca un cliente utilizando la identificación proporcionada.
o Si no se encuentra ningún cliente con la identificación dada, se levanta una
excepción.

Método list(self)

• Descripción: Este método devuelve una lista de todos los clientes.




Parámetros: No tiene parámetros.
Funcionalidad:
5
o Retorna una lista de todos los clientes almacenados en el sistema.

Consideraciones adicionales:

• Este código asume que existe una clase Cliente con métodos como save (),
search_by_identification(), y all() para interactuar con los datos de los
clientes.
• Se utiliza la biblioteca colorama para proporcionar color al texto en la consola.
Asegúrate de tenerla instalada para que el código funcione correctamente.

Este manual del programador proporciona una descripción detallada de cómo utilizar y
entender la clase ClientController y sus métodos asociados.
EmployeeController

Class EmployeeController

La clase EmployeeController proporciona métodos para gestionar operaciones


relacionadas con empleados en un sistema. A continuación, se describen los métodos y su
funcionalidad:

Método __init__(self)

• Descripción: Constructor de la clase EmployeeController.


• Parámetros: No tiene parámetros.
• Funcionalidad: Inicializa una instancia de la clase EmployeeController.

6
Método search_by_identification(self, identification)

• Descripción: Busca un empleado por su identificación.


• Parámetros:
o identification: Identificación del empleado que se está buscando.
• Funcionalidad:
o Utiliza el método estático search_by_identification() de la clase
Employee para buscar un empleado por su identificación.
o Si no se encuentra ningún empleado con la identificación proporcionada, se
levanta una excepción.
o Retorna la instancia del empleado encontrado.
Método create(self)

• Descripción: Crea un nuevo empleado y lo guarda en el sistema.


• Parámetros: No tiene parámetros explícitos, pero solicita información al usuario
mediante la entrada estándar.
• Funcionalidad:
o Solicita al usuario el nombre, apellido, nombre de la sección y la
identificación del empleado.
o Busca la sección por nombre utilizando el método estático
search_by_name() de la clase Seccion. Si no se encuentra la sección, la
crea y la guarda.
o Crea una instancia de la clase Employee con la información proporcionada y
el ID de la sección encontrada o creada.
o Guarda la instancia del empleado.
o Retorna el ID del empleado creado.

7
Método list(self)

• Descripción: Retorna una lista de todos los empleados almacenados en el sistema.


• Parámetros: No tiene parámetros.
• Funcionalidad:
o Llama al método estático all() de la clase Employee para obtener una lista
de todos los empleados almacenados.
o Retorna la lista de empleados.

Consideraciones adicionales:

• Este código asume que existen las clases Employee y Seccion con métodos como
search_by_identification(), search_by_name() y all() para interactuar con
los datos de los empleados y secciones.
• El código proporcionado asume que la interacción con el usuario se realiza a través 8
de la entrada estándar utilizando la función input() para solicitar información.

Este manual del desarrollador proporciona una descripción detallada de cómo utilizar y
entender la clase EmployeeController y sus métodos asociados.
InvoceController

Class InvoceController

La clase InvoceController proporciona métodos para gestionar la creación de facturas en


un sistema. A continuación se describe el método principal y su funcionalidad:

Método __init__(self)

• Descripción: Constructor de la clase InvoceController.


• Parámetros: No tiene parámetros.
• Funcionalidad: Inicializa una instancia de la clase InvoceController.

Método do_invoice(self, list_ventas:list, client_id, employee_id, fecha, 9


total)

• Descripción: Crea una nueva factura y la guarda en el sistema, junto con los
detalles de las ventas realizadas.
• Parámetros:
o list_ventas: Una lista de ventas (instancias de la clase Purchase)
asociadas a la factura.
o client_id: ID del cliente al que se le factura.
o employee_id: ID del empleado que realiza la factura.
o fecha: Fecha de emisión de la factura.
o total: Total de la factura.
• Funcionalidad:
o Crea una instancia de la clase Invoce con la información proporcionada,
incluyendo el cálculo del IVA.
o Guarda la factura en el sistema.
o Para cada venta en la lista list_ventas, crea una instancia de la clase
InvoceDetail asociada a la factura y la guarda en el sistema.
o Retorna la instancia de la factura creada.
Consideraciones adicionales:
10
• Este código asume que existen las clases Invoce, InvoceDetail, y Purchase para
interactuar con los datos de facturas, detalles de facturas y compras,
respectivamente.
• Se utiliza la biblioteca decimal para realizar cálculos precisos con valores
decimales.
• La fecha se espera que sea un objeto datetime o un formato de fecha compatible.

Este manual del desarrollador proporciona una descripción detallada de cómo utilizar y
entender la clase InvoceController y su método do_invoice.
ProductController

Class ProductController

La clase ProductController se utiliza para manejar operaciones relacionadas con


productos en un sistema. A continuación se describen los métodos y su funcionalidad:

Método __init__(self)

• Descripción: Constructor de la clase ProductController.


• Parámetros: No tiene parámetros.
• Funcionalidad: Inicializa una instancia de la clase ProductController.
11

Método create(self)

• Descripción: Crea un nuevo producto y lo guarda en el sistema.


• Parámetros: No tiene parámetros explícitos, pero solicita información al usuario
mediante la entrada estándar.
• Funcionalidad:
o Solicita al usuario el nombre de la marca, la descripción, el precio y el stock
del producto.
o Busca la marca por nombre utilizando el método estático
search_by_name() de la clase Marca. Si la marca no existe, la crea y la
guarda en el sistema.
o Crea una instancia de la clase Product con la información proporcionada y
el ID de la marca encontrada o creada.
o Guarda la instancia del producto en el sistema.
o Retorna la instancia del producto creado.
Método list(self)

• Descripción: Retorna una lista de todos los productos almacenados en el sistema.


• Parámetros: No tiene parámetros.
• Funcionalidad:
o Llama al método estático all () de la clase Product para obtener una lista
de todos los productos almacenados. 12
o Retorna la lista de productos.

Consideraciones adicionales:

• Este código asume que existen las clases Product y Marca con métodos como save
(), search_by_name () y all () para interactuar con los datos de los productos y
las marcas respectivamente.
• La entrada de datos del usuario se realiza a través de la entrada estándar utilizando
la función input ().
• Se utiliza la biblioteca colorama para proporcionar color al texto en la consola.

Este manual del programador proporciona una descripción detallada de cómo utilizar y
entender la clase ProductController y sus métodos asociados.
SalesController

Clase SalesController

La clase SalesController se utiliza para manejar operaciones relacionadas con las ventas
de productos en un sistema. A continuación se describe el método principal y su
funcionalidad:

Método __init__(self)

• Descripción: Constructor de la clase SalesController.


• Parámetros: No tiene parámetros.
• Funcionalidad: Inicializa una instancia de la clase SalesController.

Método do_sale(self, client_id, employee_id)


13
• Descripción: Realiza una venta de productos en el sistema.
• Parámetros:
o client_id: ID del cliente al que se le realiza la venta.
o employee_id: ID del empleado que realiza la venta.
• Funcionalidad:
o Inicia un bucle para solicitar al usuario los productos que desea vender.
o El usuario ingresa el ID del producto a vender y la cantidad.
o Verifica si el producto existe y si hay suficiente stock disponible.
o Calcula el total de la venta multiplicando el precio unitario del producto por
la cantidad vendida.
o Actualiza el stock del producto en el sistema.
o Registra la venta en el sistema creando una instancia de la clase Purchase.
o Agrega la venta a una lista de ventas realizadas.
o Finaliza el bucle cuando el usuario ingresa 0 como ID del producto.
o Retorna la lista de ventas realizadas.
Consideraciones adicionales:
14
• Este código asume que existen las clases Product y Purchase para interactuar con
los datos de los productos y las ventas respectivamente.
• Se utiliza la biblioteca colorama para proporcionar color al texto en la consola.
• La entrada de datos del usuario se realiza a través de la entrada estándar utilizando
la función input().
• Se espera que client_id y employee_id sean identificadores válidos de clientes y
empleados en el sistema.

Este manual del programador proporciona una descripción detallada de cómo utilizar y
entender la clase SalesController y su método do_sale.
DATABASE

CONEXION
Clase Db
Introducción

La clase Db proporciona una interfaz para interactuar con una base de datos MySQL
utilizando la biblioteca pymysql en Python. Este manual del programador tiene como
objetivo proporcionar una guía detallada sobre cómo utilizar y extender esta clase de
manera efectiva.

Requisitos previos

Antes de utilizar la clase Db, asegúrese de tener instalada la biblioteca pymysql. Puede
instalarla utilizando pip:

pip install pymysql


15
Uso básico

Para utilizar la clase Db, primero importe la clase y cree una instancia de ella:

python
from db import Db

db = Db()

Una vez que tenga una instancia de Db, puede utilizar sus métodos para ejecutar consultas
SQL y administrar la conexión a la base de datos.

Ejecutar una consulta SQL

Para ejecutar una consulta SQL que modifique los datos en la base de datos, utilice el
método execute:

python
sql = "INSERT INTO usuarios (nombre, edad) VALUES (%s, %s)"
parametros = ("Ejemplo", 30)
[Link](sql, parametros)

Consultar datos de la base de datos


Para consultar datos de la base de datos, utilice el método consultar_sql:

python
sql = "SELECT * FROM usuarios WHERE edad > %s"
parametros = (25,)
resultados = db.consultar_sql(sql, parametros)
for resultado in resultados:
print(resultado)

Cerrar la conexión

Cuando haya terminado de utilizar la clase Db, asegúrese de cerrar la conexión a la base de
datos utilizando el método cerrar:

python
[Link]()
Patrón Singleton

La clase Db implementa el patrón Singleton, lo que significa que solo se creará una
instancia de la clase en toda la ejecución del programa. Esto garantiza que solo haya una
conexión a la base de datos en todo momento.

Consideraciones adicionales 16
• Asegúrese de manejar correctamente las excepciones al interactuar con la base de datos.
• Evite almacenar información confidencial, como contraseñas de bases de datos,
directamente en el código. Considere utilizar variables de entorno u otros métodos
seguros para gestionar la configuración de la base de datos.

Extensibilidad

Si necesita extender la funcionalidad de la clase Db, puede hacerlo agregando nuevos


métodos o modificando los existentes según sea necesario. Asegúrese de seguir las mejores
prácticas de programación y documente adecuadamente cualquier cambio que realice.

Conclusión

La clase Db proporciona una forma conveniente y eficaz de interactuar con una base de
datos MySQL en Python. Siguiendo las pautas y recomendaciones proporcionadas en este
manual, podrá utilizar y extender esta clase de manera efectiva en sus proyectos.

Este manual del programador proporciona una guía básica para comenzar a utilizar la clase
Db y sugiere algunas consideraciones importantes para su uso y extensibilidad. Si tienes
alguna pregunta adicional o necesitas más detalles sobre algún aspecto específico, no dudes
en preguntar.

MODELS

BASE_MODEL
Introducción

Este manual proporciona una guía para entender y mantener el código del proyecto.
Describe la estructura del código, las principales clases y métodos, así como las mejores
prácticas para la programación y el mantenimiento.

Estructura del Código

El código está organizado en un archivo principal base_model.py, que contiene la 17


definición de la clase BaseModel y sus métodos.

Clase BaseModel

La clase BaseModel es una clase base para interactuar con la base de datos. Contiene los
siguientes métodos:

• __init__(self): Constructor de la clase que inicializa la conexión a la base de datos.


• save(self, sql, parametros): Método para guardar registros en la base de datos.
• all(sql): Método estático para recuperar todos los registros de la base de datos.
• find(sql, parametros): Método estático para buscar registros en la base de datos
con parámetros específicos.
• find_one(sql, parametros): Método estático para buscar un solo registro en la base
de datos con parámetros específicos.
• update(self): Método para actualizar registros en la base de datos (a implementar).
• delete(self, sql, parametros): Método para eliminar registros de la base de
datos.

Uso

Para utilizar la clase BaseModel, se debe importar desde el archivo donde se necesite y
crear una instancia de la misma. A continuación, se pueden llamar a los métodos según sea
necesario para interactuar con la base de datos.
python
from [Link] import Db
from base_model import BaseModel

# Crear instancia de BaseModel


base_model = BaseModel()

# Ejemplo de uso del método save


sql = "INSERT INTO tabla (campo1, campo2) VALUES (?, ?)"
parametros = (valor1, valor2)
id = base_model.save(sql, parametros)

# Ejemplo de uso del método find


sql = "SELECT * FROM tabla WHERE campo = ?"
parametros = (valor,)
resultados = [Link](sql, parametros)

# Otros métodos se utilizan de manera similar

Mejores Prácticas

• Utilizar los métodos estáticos all, find, find_one para operaciones de consulta.
• Utilizar la instancia de BaseModel para operaciones de inserción, actualización y
eliminación.
• Seguir los principios de seguridad al interactuar con la base de datos para evitar 18
vulnerabilidades como la inyección SQL.
• Implementar el método update según sea necesario para permitir la actualización de
registros en la base de datos.

Mantenimiento

Para mantener el código, se recomienda seguir las siguientes prácticas:

• Revisar regularmente la seguridad del código para evitar vulnerabilidades.


• Documentar cualquier cambio importante realizado en el código.
• Realizar pruebas exhaustivas después de cualquier modificación.
• Mantener actualizadas las dependencias del proyecto.
19
CLIENTES

Introducción
20
Este manual está destinado a los desarrolladores que trabajarán en el mantenimiento y la
extensión del sistema de gestión de clientes. Proporciona una visión general de la
arquitectura del código, explica las principales clases y métodos, y ofrece pautas sobre
cómo agregar nuevas funcionalidades o realizar modificaciones.

Estructura del Código

El código consta de dos archivos principales:

1. base_model.py: Define la clase BaseModel, que proporciona métodos genéricos para


interactuar con la base de datos.
2. [Link]: Define la clase Cliente, que hereda de BaseModel y contiene métodos
específicos para operaciones relacionadas con los clientes.

Clase BaseModel

La clase BaseModel sirve como una capa de abstracción para interactuar con la base de
datos. Proporciona los siguientes métodos genéricos:

• __init__(self): Constructor que inicializa la conexión a la base de datos y el cursor.


• save(self, sql, parametros): Método para guardar registros en la base de datos.
• all(sql): Método estático para obtener todos los registros de la base de datos.
• find(sql, parametros): Método estático para buscar registros que coincidan con
ciertos parámetros.
• find_one(sql, parametros): Método estático para buscar un único registro que
coincida con ciertos parámetros.
• update(self): Método para actualizar registros en la base de datos (a implementar).
• delete(self, sql, parametros): Método para eliminar registros de la base de
datos.

Clase Cliente

La clase Cliente hereda de BaseModel y proporciona métodos específicos para


operaciones relacionadas con los clientes:

• __init__(self, id, identificacion, nombres, apellidos, telefono,


direccion, ciudad): Constructor que inicializa los atributos del cliente.
• save(self): Método para guardar el cliente en la base de datos.
• search_by_identification(identification): Método estático para buscar un
cliente por su identificación.
• update(self): Método para actualizar los datos del cliente en la base de datos.
• all(): Método estático para obtener todos los clientes de la base de datos.
• get_by_id(id): Método estático para obtener un cliente por su ID. 21

Desarrollo y Mantenimiento

Para agregar nuevas funcionalidades o realizar modificaciones en el sistema, sigue estas


pautas:

1. Agrega nuevos métodos o modifica los existentes en la clase Cliente según los requisitos
de la aplicación.
2. Si es necesario realizar cambios en la interacción con la base de datos, considera hacer
ajustes en la clase BaseModel.
3. Documenta cualquier cambio realizado y asegúrate de mantener actualizado el código y la
documentación.
4. Realiza pruebas exhaustivas para garantizar el correcto funcionamiento de las nuevas
funcionalidades y la integridad del sistema.

Seguridad

Asegúrate de seguir las mejores prácticas de seguridad al interactuar con la base de datos,
como validar y sanitizar los datos de entrada para prevenir ataques de inyección de SQL.
Escalabilidad

El diseño actual del sistema permite la escalabilidad al agregar nuevas entidades y


operaciones de base de datos. Sin embargo, asegúrate de mantener la coherencia en el
diseño y la implementación al extender el sistema.

Este manual proporciona una guía para comprender y trabajar con el código existente, así
como para desarrollar nuevas funcionalidades de manera segura y escalable. Si tienes
alguna pregunta o necesitas ayuda adicional, no dudes en consultar.

22
23

EMPLOYEE
Introducción

Este manual está diseñado para proporcionar una comprensión completa del código y las
prácticas recomendadas para el desarrollo y mantenimiento del sistema de gestión de
empleados. Se detalla la estructura del código, las clases y métodos principales, así como
las mejores prácticas para la programación y el acceso a la base de datos.

Estructura del Código

El código consta de dos archivos principales:

1. base_model.py: Define la clase BaseModel, que proporciona métodos genéricos para


interactuar con la base de datos.
2. [Link]: Define la clase Employee, que hereda de BaseModel y contiene métodos
específicos para operaciones relacionadas con los empleados.
Clase BaseModel

La clase BaseModel sirve como una capa de abstracción para interactuar con la base de
datos. Incluye los siguientes métodos genéricos:

• __init__(self): Constructor que inicializa la conexión a la base de datos y el cursor.


• save(self, sql, parametros): Método para guardar registros en la base de datos.
• all(sql): Método estático para obtener todos los registros de la base de datos.
• find(sql, parametros): Método estático para buscar registros que coincidan con
ciertos parámetros.
• find_one(sql, parametros): Método estático para buscar un único registro que
coincida con ciertos parámetros.
• update(self): Método para actualizar registros en la base de datos (a implementar).
• delete(self, sql, parametros): Método para eliminar registros de la base de
datos.

Clase Employee

La clase Employee hereda de BaseModel y proporciona métodos específicos para


operaciones relacionadas con los empleados:

• __init__(self, id, seccion_id, identificacion, nombre, apellido): 24


Constructor que inicializa los atributos de un empleado.
• save(self): Método para guardar un empleado en la base de datos.
• all(): Método estático para obtener todos los empleados de la base de datos.
• find_by_id(id): Método estático para obtener un empleado por su ID.
• search_by_identification(identification): Método estático para buscar un
empleado por su identificación.
• update(self): Método para actualizar los datos de un empleado en la base de datos.

Desarrollo y Mantenimiento

Para desarrollar nuevas funcionalidades o realizar modificaciones en el sistema, sigue estas


pautas:

1. Agrega nuevos métodos o modifica los existentes en la clase Employee según los
requisitos del sistema.
2. Si es necesario realizar cambios en la interacción con la base de datos, considera hacer
ajustes en la clase BaseModel.
3. Documenta cualquier cambio realizado y asegúrate de mantener actualizado el código y la
documentación.
4. Realiza pruebas exhaustivas para garantizar el correcto funcionamiento de las nuevas
funcionalidades y la integridad del sistema.
Seguridad

Recuerda seguir las mejores prácticas de seguridad al interactuar con la base de datos,
como validar y sanitizar los datos de entrada para prevenir ataques de inyección de SQL.

Escalabilidad

El diseño actual del sistema permite la escalabilidad al agregar nuevas funcionalidades y


operaciones de base de datos. Mantén la coherencia en el diseño y la implementación al
extender el sistema.

Este manual proporciona una guía detallada para comprender y trabajar con el código
existente, así como para desarrollar nuevas funcionalidades de manera segura y escalable.
Si tienes alguna pregunta o necesitas ayuda adicional, no dudes en consultar.

25
26

INVOICE DETAIL

Clase InvoiceDetail
Introducción

Este manual proporciona una guía para comprender y trabajar con la clase InvoiceDetail,
que está diseñada para interactuar con una tabla de detalles de facturas en una base de
datos. Se describe la estructura de la clase, sus métodos principales y las mejores prácticas
para su uso.

Estructura de la Clase

La clase InvoiceDetail está diseñada de la siguiente manera:

python
from models.base_model import BaseModel

class InvoiceDetail(BaseModel):

def __init__(self, id=None, compra_por_producto_id=None,


factura_id=None) -> None:
[Link] = id
self.compra_por_producto_id = compra_por_producto_id
self.factura_id = factura_id
super().__init__()

def save(self):
sql = 'INSERT INTO detalle_factura (compra_por_producto_id,
factura_id) VALUES (%s, %s)'
parametros = (self.compra_por_producto_id, self.factura_id)
id = super().save(sql, parametros)

[Link] = id

return id
Funcionalidades

La clase InvoiceDetail proporciona las siguientes funcionalidades:

1. Inicialización (__init__):
o Define los atributos de un detalle de factura: id, compra_por_producto_id,
27
factura_id.
o Llama al constructor de la clase padre (BaseModel) para inicializar la conexión a la
base de datos.
2. Método save:
o Guarda un detalle de factura en la base de datos.
o Ejecuta una consulta SQL para insertar un nuevo registro en la tabla
detalle_factura.
o Utiliza los valores de compra_por_producto_id y factura_id como
parámetros en la consulta.
o Después de guardar el detalle de factura, asigna el ID generado a [Link] y lo
devuelve.

Uso

Para utilizar la clase InvoiceDetail, sigue estos pasos:

1. Importa la clase InvoiceDetail desde el archivo donde está definida.


2. Crea una instancia de InvoiceDetail proporcionando los valores necesarios para los
atributos.
3. Llama al método save() para guardar el detalle de la factura en la base de datos.

python
from models.invoice_detail import InvoiceDetail
# Crear un nuevo detalle de factura
detalle = InvoiceDetail(compra_por_producto_id=1, factura_id=1001)
[Link]()
Mejores Prácticas

Para un uso efectivo de la clase InvoiceDetail, considera seguir estas mejores prácticas:

• Validar los datos antes de crear una instancia de InvoiceDetail y llamar al método
save.
• Seguir las prácticas de seguridad al interactuar con la base de datos, como evitar la
inyección de SQL.

Mantenimiento

Para mantener el código y la funcionalidad de la clase InvoiceDetail, asegúrate de:

• Documentar cualquier cambio o adición de funcionalidades.


• Realizar pruebas exhaustivas para garantizar el correcto funcionamiento en diferentes
escenarios.

28
Este manual proporciona una guía detallada para trabajar con la clase InvoiceDetail. Si
necesitas más información o tienes alguna pregunta específica, no dudes en consultar.
29

INVOICE

Clase Invoice
Introducción

Este manual proporciona una guía detallada para comprender y trabajar con la clase
Invoice, diseñada para interactuar con una tabla de facturas en una base de datos. Se
describe la estructura de la clase, sus métodos principales y las mejores prácticas para su
uso.

Estructura de la Clase

La clase Invoice está diseñada de la siguiente manera:

python
from models.base_model import BaseModel
from models.invoice_detail import InvoiceDetail
from [Link] import Cliente
from [Link] import Employee

class Invoice(BaseModel):

def __init__(self, id=None, cliente_id=None, empleado_id=None,


fecha=None, total=None, iva=None) -> None:
[Link] = id
self.cliente_id = cliente_id
self.empleado_id = empleado_id
[Link] = fecha
[Link] = total
[Link] = iva
super().__init__()

def cliente(self):
return Cliente.get_by_id(self.cliente_id)

def empleado(self):
return Employee.find_by_id(self.empleado_id)

def get_detalles_factura(self):
return [Link]('SELECT * FROM detalle_factura WHERE
factura_id = %s', ([Link],))

def save(self):
sql = 'INSERT INTO factura (cliente_id, empleado_id, fecha,
30
total, iva) VALUES (%s, %s, %s, %s, %s)'
parametros = (self.cliente_id, self.empleado_id, [Link],
[Link], [Link])
id = super().save(sql, parametros)

[Link] = id

return id
Funcionalidades

La clase Invoice proporciona las siguientes funcionalidades:

1. Inicialización (__init__):
o Define los atributos de una factura: id, cliente_id, empleado_id, fecha,
total, iva.
o Llama al constructor de la clase padre (BaseModel) para inicializar la conexión a la
base de datos.
2. Método cliente:
o Devuelve el objeto Cliente asociado a la factura utilizando el método
get_by_id de la clase Cliente.
3. Método empleado:
o Devuelve el objeto Employee asociado a la factura utilizando el método
find_by_id de la clase Employee.
4. Método get_detalles_factura:
o Busca los detalles de la factura en la base de datos utilizando la clase
InvoiceDetail.
o Ejecuta una consulta SQL para seleccionar todos los detalles de la factura con el ID
de la factura actual.
5. Método save:
o Guarda la factura en la base de datos.
o Ejecuta una consulta SQL para insertar un nuevo registro en la tabla factura.
o Utiliza los valores de los atributos de la factura como parámetros en la consulta.
o Después de guardar la factura, asigna el ID generado a [Link] y lo devuelve.

Uso

Para utilizar la clase Invoice, sigue estos pasos:

1. Importa la clase Invoice desde el archivo donde está definida.


2. Crea una instancia de Invoice proporcionando los valores necesarios para los atributos.
3. Llama al método save() para guardar la factura en la base de datos.

python
from [Link] import Invoice

# Crear una nueva factura


factura = Invoice(cliente_id=1, empleado_id=1, fecha='2024-02-20',
total=100.0, iva=16.0)
31
[Link]()
Mejores Prácticas

Para un uso efectivo de la clase Invoice, considera seguir estas mejores prácticas:

• Validar los datos antes de crear una instancia de Invoice y llamar al método save.
• Documentar cualquier cambio o adición de funcionalidades.
• Realizar pruebas exhaustivas para garantizar el correcto funcionamiento en diferentes
escenarios.

Mantenimiento

Para mantener el código y la funcionalidad de la clase Invoice, asegúrate de:

• Documentar cualquier cambio o adición de funcionalidades.


• Realizar pruebas exhaustivas para garantizar el correcto funcionamiento en diferentes
escenarios.

Este manual proporciona una guía detallada para trabajar con la clase Invoice. Si necesitas
más información o tienes alguna pregunta específica, no dudes en consultar.
32

MARCA

Clase Marca
Introducción

Este manual proporciona una guía detallada para comprender y trabajar con la clase Marca,
diseñada para interactuar con una tabla de marcas en una base de datos. Se describe la
estructura de la clase, sus métodos principales y las mejores prácticas para su uso.

Estructura de la Clase

La clase Marca está diseñada de la siguiente manera:

python
from models.base_model import BaseModel

class Marca(BaseModel):
def __init__(self, id=None, nombre=None) -> None:
[Link] = id
[Link] = nombre
super().__init__()

def save(self):
sql = 'INSERT INTO marcas (Nombre) VALUES (%s)'
parametros = ([Link],)
id = super().save(sql, parametros)

[Link] = id
return id

@staticmethod
def search_by_name(nombre):
sql = 'SELECT * FROM marcas WHERE Nombre = %s'
parametros = (nombre,)
result = BaseModel.find_one(sql, parametros)

if result:
marca = Marca(result[0], result[1])
return marca
Funcionalidades

La clase Marca proporciona las siguientes funcionalidades: 33


1. Inicialización (__init__):
o Define los atributos de una marca: id y nombre.
o Llama al constructor de la clase padre (BaseModel) para inicializar la conexión a la
base de datos.
2. Método save:
o Guarda una nueva marca en la base de datos.
o Ejecuta una consulta SQL para insertar un nuevo registro en la tabla marcas.
o Utiliza el valor del atributo nombre como parámetro en la consulta.
o Después de guardar la marca, asigna el ID generado a [Link] y lo devuelve.
3. Método estático search_by_name:
o Busca una marca por su nombre en la base de datos.
o Ejecuta una consulta SQL para buscar una marca con el nombre proporcionado.
o Si encuentra un resultado, crea y devuelve un objeto Marca con los datos
obtenidos de la base de datos.

Uso

Para utilizar la clase Marca, sigue estos pasos:

1. Importa la clase Marca desde el archivo donde está definida.


2. Crea una instancia de Marca proporcionando el nombre de la marca.
3. Llama al método save() para guardar la marca en la base de datos.
4. Opcionalmente, utiliza el método estático search_by_name() para buscar una marca
por su nombre.

python
from [Link] import Marca

# Crear una nueva marca


nueva_marca = Marca(nombre="Nike")
nueva_marca.save()

# Buscar una marca por su nombre


marca_encontrada = Marca.search_by_name("Nike")
Mejores Prácticas

Para un uso efectivo de la clase Marca, considera seguir estas mejores prácticas:

• Validar los datos antes de crear una instancia de Marca y llamar al método save.
• Documentar cualquier cambio o adición de funcionalidades.
• Realizar pruebas exhaustivas para garantizar el correcto funcionamiento en diferentes
escenarios.

Mantenimiento

Para mantener el código y la funcionalidad de la clase Marca, asegúrate de:


34
• Documentar cualquier cambio o adición de funcionalidades.
• Realizar pruebas exhaustivas para garantizar el correcto funcionamiento en diferentes
escenarios.

Este manual proporciona una guía detallada para trabajar con la clase Marca. Si necesitas
más información o tienes alguna pregunta específica, no dudes en consultar.
35

PRODUCT

Clase Product
Introducción

Este manual proporciona una guía detallada para comprender y trabajar con la clase
Product, diseñada para interactuar con una tabla de productos en una base de datos. Se
describe la estructura de la clase, sus métodos principales y las mejores prácticas para su
uso.

Estructura de la Clase

La clase Product está diseñada de la siguiente manera:

python
from models.base_model import BaseModel
class Product(BaseModel):

def __init__(self, id=None, marca_id=None, descripcion=None,


precio=None, stock=None) -> None:
[Link] = id
self.marca_id = marca_id
[Link] = descripcion
[Link] = precio
[Link] = stock
super().__init__()

def save(self):
if [Link]:
return [Link]()
sql = 'INSERT INTO productos (marca_id, descripcion, precio,
stock) VALUES (%s, %s, %s, %s)'
params = (self.marca_id, [Link], [Link],
[Link])
id = super().save(sql, params)
[Link] = id
return id

@staticmethod
def all():
lista = []
sql = 'SELECT * FROM productos'
result = [Link](sql)
if result:
36
for r in result:
product = Product(r[0], r[1], r[2], r[3], r[4])
[Link](product)
return lista

@staticmethod
def find_by_id(id):
sql = 'SELECT * FROM productos WHERE id = %s'
params = (id,)
result = BaseModel.find_one(sql, params)
if result:
return Product(result[0], result[1], result[2], result[3],
result[4])
return None

def update(self):
sql = 'UPDATE productos SET marca_id = %s, descripcion = %s,
precio = %s, stock = %s WHERE id = %s'
params = (self.marca_id, [Link], [Link],
[Link], [Link])
return super().save(sql, params)
Funcionalidades

La clase Product proporciona las siguientes funcionalidades:

1. Inicialización (__init__):
o Define los atributos de un producto: id, marca_id, descripcion, precio y
stock.
o Llama al constructor de la clase padre (BaseModel) para inicializar la conexión a la
base de datos.
2. Método save:
o Guarda un nuevo producto en la base de datos.
o Si el producto ya tiene un ID asignado, se actualiza llamando al método
update().
o Si no tiene un ID asignado, se inserta un nuevo registro en la tabla productos.
o Después de guardar el producto, asigna el ID generado a [Link] y lo devuelve.
3. Método estático all:
o Devuelve una lista de todos los productos en la base de datos.
o Ejecuta una consulta SQL para seleccionar todos los registros de la tabla

o
productos.
Crea objetos Product con los datos obtenidos de la base de datos y los agrega a
37
una lista que luego se devuelve.
4. Método estático find_by_id:
o Busca un producto por su ID en la base de datos.
o Ejecuta una consulta SQL para seleccionar un registro de la tabla productos con
el ID proporcionado.
o Si encuentra un resultado, crea y devuelve un objeto Product con los datos
obtenidos de la base de datos.
5. Método update:
o Actualiza un producto existente en la base de datos.
o Ejecuta una consulta SQL para actualizar un registro en la tabla productos con
los nuevos valores de los atributos.

Uso

Para utilizar la clase Product, sigue estos pasos:

1. Importa la clase Product desde el archivo donde está definida.


2. Crea una instancia de Product proporcionando los valores necesarios para los atributos.
3. Llama al método save() para guardar o actualizar el producto en la base de datos.
4. Opcionalmente, utiliza los métodos estáticos all() y find_by_id() para recuperar
productos de la base de datos.
python
from [Link] import Product

# Crear un nuevo producto


nuevo_producto = Product(marca_id=1, descripcion="Zapatos deportivos",
precio=50.0, stock=100)
nuevo_producto.save()

# Actualizar un producto existente


producto_existente = Product.find_by_id(1)
producto_existente.precio = 60.0
producto_existente.save()

# Obtener todos los productos


todos_los_productos = [Link]()
Mejores Prácticas

Para un uso efectivo de la clase Product, considera seguir estas mejores prácticas:

• Validar los datos antes de crear una instancia de Product y llamar al método save.
• Documentar cualquier cambio o adición de funcionalidades.
• Realizar pruebas exhaustivas para garantizar el correcto funcionamiento en diferentes
escenarios.

Mantenimiento
38
Para mantener el código y la funcionalidad de la clase Product, asegúrate de:

• Documentar cualquier cambio o adición de funcionalidades.


• Realizar pruebas exhaustivas para garantizar el correcto funcionamiento en diferentes
escenarios.

Este manual proporciona una guía detallada para trabajar con la clase Product. Si necesitas
más información o tienes alguna pregunta específica, no dudes en consultar.
39
PURCHASE

Clase Purchase
Introducción

Este manual proporciona una guía detallada para comprender y trabajar con la clase
Purchase, diseñada para interactuar con una tabla de compras por producto en una base de
datos. Se describe la estructura de la clase, sus métodos principales y las mejores prácticas
para su uso.

Estructura de la Clase

La clase Purchase está diseñada para manejar las compras realizadas por los clientes en
relación con los productos disponibles. Aquí está su estructura:

python
from models.base_model import BaseModel
from [Link] import Product
40
class Purchase(BaseModel):

def __init__(self, id=None, product_id=None, customer_id=None,


employee_id=None, date=None, quantity=None, unit_price=None, total=None)
-> None:
[Link] = id
self.product_id = product_id
self.customer_id = customer_id
self.employee_id = employee_id
[Link] = date
[Link] = quantity
self.unit_price = unit_price
[Link] = total
super().__init__()

def product(self):
return Product.find_by_id(self.product_id)

def save(self):
if [Link]:
return [Link]()
sql = 'INSERT INTO purchases (product_id, customer_id,
employee_id, date, quantity, unit_price, total) VALUES (%s, %s, %s, %s,
%s, %s, %s)'
params = (self.product_id, self.customer_id, self.employee_id,
[Link], [Link], self.unit_price, [Link])
id = super().save(sql, params)
[Link] = id
return id
@staticmethod
def all():
purchases = []
sql = 'SELECT * FROM purchases'
result = [Link](sql)
if result:
for r in result:
purchase = Purchase(r[0], r[1], r[2], r[3], r[4], r[5],
r[6], r[7])
[Link](purchase)
return purchases

@staticmethod
def find_by_id(id):
sql = 'SELECT * FROM purchases WHERE id = %s'
params = (id,)
result = BaseModel.find_one(sql, params)
if result:
return Purchase(result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7])
return None

def update(self):
sql = 'UPDATE purchases SET product_id = %s, customer_id = %s,
employee_id = %s, date = %s, quantity = %s, unit_price = %s, total = %s
WHERE id = %s'
params = (self.product_id, self.customer_id, self.employee_id,
41
[Link], [Link], self.unit_price, [Link], [Link])
return super().save(sql, params)
Funcionalidades

La clase Purchase proporciona las siguientes funcionalidades:

1. Inicialización (__init__):
o Define los atributos de una compra: id, product_id, customer_id,
employee_id, date, quantity, unit_price y total.
o Llama al constructor de la clase padre (BaseModel) para inicializar la conexión a la
base de datos.
2. Método product:
o Devuelve el producto asociado a la compra utilizando el método find_by_id de
la clase Product.
3. Método save:
o Guarda una nueva compra en la base de datos.
o Si la compra ya tiene un ID asignado, se actualiza llamando al método update().
o Si no tiene un ID asignado, se inserta un nuevo registro en la tabla purchases.
o Después de guardar la compra, asigna el ID generado a [Link] y lo devuelve.
4. Método estático all:
o Devuelve una lista de todas las compras en la base de datos.
o Ejecuta una consulta SQL para seleccionar todos los registros de la tabla
purchases.
o Crea objetos Purchase con los datos obtenidos de la base de datos y los agrega a
una lista que luego se devuelve.
5. Método estático find_by_id:
o Busca una compra por su ID en la base de datos.
o Ejecuta una consulta SQL para seleccionar un registro de la tabla purchases con
el ID proporcionado.
o Si encuentra un resultado, crea y devuelve un objeto Purchase con los datos
obtenidos de la base de datos.
6. Método update:
o Actualiza una compra existente en la base de datos.
o Ejecuta una consulta SQL para actualizar un registro en la tabla purchases con
los nuevos valores de los atributos.

Uso

Para utilizar la clase Purchase, sigue estos pasos:

1. Importa la clase Purchase desde el archivo donde está definida.


2. Crea una instancia de Purchase proporcionando los valores necesarios para los atributos.
3. Llama al método save() para guardar o actualizar la compra en la base de datos.
4. Opcionalmente, utiliza los métodos estáticos all() y find_by_id() para recuperar
compras de la base de datos. 42
python
from [Link] import Purchase

# Crear una nueva compra


nueva_compra = Purchase(product_id=1, customer_id=1, employee_id=1,
date="2024-02-20", quantity=3, unit_price=10.0, total=30.0)
nueva_compra.save()

# Actualizar una compra existente


compra_existente = Purchase.find_by_id(1)
compra_existente.quantity = 5
compra_existente.save()

# Obtener todas las compras


todas_las_compras = [Link]()
Mejores Prácticas

• Valida los datos antes de crear una instancia de Purchase y antes de llamar al método
save() para evitar errores en la base de datos.
• Utiliza transacciones para agrupar múltiples operaciones de compra
43

SECCION

Clase Seccion
Introducción

Este manual proporciona una guía detallada para entender y utilizar la clase Seccion. La
clase Seccion está diseñada para interactuar con una tabla de secciones en una base de
datos. Proporciona métodos para realizar operaciones CRUD (Crear, Leer, Actualizar,
Eliminar) en registros de secciones, así como métodos adicionales para buscar y recuperar
datos específicos.
Estructura de la Clase

La clase Seccion tiene la siguiente estructura:

python
from models.base_model import BaseModel

class Seccion(BaseModel):

def __init__(self, nombre, id=None):


[Link] = id
[Link] = nombre
super().__init__()

def save(self):
if [Link]:
return [Link]()
sql = 'INSERT INTO secciones (nombre) VALUES (%s)'
params = ([Link],)
id = super().save(sql, params)
[Link] = id
return id

@staticmethod
def search_by_name(nombre):
sql = 'SELECT * FROM secciones WHERE nombre = %s' 44
params = (nombre,)
result = BaseModel.find_one(sql, params)
if result:
return Seccion(result[1], result[0])
return None

@staticmethod
def all():
lista = []
sql = 'SELECT * FROM secciones'
result = [Link](sql)
if result:
for r in result:
seccion = Seccion(r[1], r[0])
[Link](seccion)
return lista
Funcionalidades

1. Constructor (__init__)

• Inicializa una instancia de Seccion con un nombre y un ID opcional.


• Establece los atributos id y nombre de la instancia.
• Llama al constructor de la clase padre (BaseModel) para inicializar la conexión a la base
de datos.

2. Método save
• Guarda una instancia de Seccion en la base de datos.
• Verifica si la sección ya tiene un ID asignado. Si tiene uno, se llama al método update para
actualizar la entrada en la base de datos.
• Si la sección no tiene un ID asignado, se ejecuta una consulta SQL de inserción para
agregar una nueva entrada en la tabla secciones.
• Después de guardar la sección, asigna el ID generado a [Link] y lo devuelve.

3. Método estático search_by_name

• Busca una sección por su nombre en la base de datos.


• Ejecuta una consulta SQL para seleccionar un registro de la tabla secciones con el
nombre proporcionado.
• Si encuentra un resultado, crea y devuelve un objeto Seccion con los datos obtenidos de
la base de datos.

4. Método estático all

• Devuelve una lista de todas las secciones en la base de datos.


• Ejecuta una consulta SQL para seleccionar todos los registros de la tabla secciones.
• Crea objetos Seccion con los datos obtenidos de la base de datos y los agrega a una lista
que luego se devuelve.

Uso Recomendado
45
• Utiliza la clase Seccion para interactuar con la tabla de secciones en la base de datos.
• Valida los datos antes de crear una instancia de Seccion y antes de llamar al método
save() para evitar errores en la base de datos.
• Utiliza los métodos estáticos search_by_name y all para buscar y recuperar secciones
de la base de datos según sea necesario.
Este manual proporciona una descripción detallada de la clase Seccion y su funcionalidad
asociada, junto con ejemplos de cómo utilizarla. Utilízalo como referencia al desarrollar y
trabajar con la clase Seccion en tu aplicación.

46
VIEW

Client
Sistema de Gestión de Clientes
Introducción

Este manual proporciona una visión general del código y las estructuras utilizadas en el
Sistema de Gestión de Clientes. Está diseñado para ayudar a los desarrolladores a
comprender cómo funciona el sistema y a realizar modificaciones o extensiones según sea
necesario.

Estructura del Proyecto

El proyecto se organiza de la siguiente manera:

• [Link]: Punto de entrada del programa.


• controllers/: Contiene los controladores de la lógica de negocio.


models/: Define las clases de datos para los clientes y otras entidades.
views/: Contiene las interfaces de usuario.
47
• utils/: Módulos utilitarios, como configuraciones o herramientas de formateo.

Componentes Principales

1. ClientController

Este controlador maneja la lógica relacionada con los clientes, como la creación y listado
de clientes.

2. ClientUI

La interfaz de usuario para interactuar con el sistema. Permite al usuario crear nuevos
clientes y listar los clientes existentes.
3. Client (Modelo)

La clase Client define la estructura de un cliente, incluyendo su identificación, nombre y


apellido.

48

4. Colorama

Se utiliza el módulo Colorama para cambiar los colores y estilos del texto en la terminal,
mejorando la presentación de la interfaz de usuario.

Uso

Para ejecutar el programa, simplemente ejecute [Link]. Esto iniciará la interfaz de


usuario del sistema, donde se pueden seleccionar diferentes opciones de menú para
interactuar con el sistema de gestión de clientes.

Personalización y Extensión

El sistema puede ser personalizado y extendido según sea necesario. Algunas posibles áreas
de mejora incluyen:
• Adición de funcionalidades adicionales, como la edición o eliminación de clientes.
• Mejoras en la presentación de la interfaz de usuario.
• Implementación de pruebas unitarias para garantizar la estabilidad del sistema.

Notas de Seguridad

• Se debe tener cuidado al manipular datos de clientes, asegurando que se sigan las mejores
prácticas de seguridad para proteger la información del cliente.
• La entrada del usuario debe ser validada para evitar posibles vulnerabilidades, como la
inyección de código.

Conclusiones

El Sistema de Gestión de Clientes proporciona una base sólida para administrar clientes y
puede ser extendido y adaptado según las necesidades del proyecto. Se recomienda revisar
el código existente y seguir las convenciones de codificación establecidas al realizar
modificaciones o extensiones.

Este manual del programador proporciona una visión general del sistema, sus componentes
y cómo pueden ser personalizados o extendidos. 49

Employee
Manual del Programador - Sistema de Gestión de Empleados
Introducción

Este manual está diseñado para proporcionar una guía detallada para los desarrolladores
que trabajan en el Sistema de Gestión de Empleados. El sistema permite la creación y el
listado de empleados, proporcionando una interfaz de usuario simple a través de la
terminal.

Estructura del Proyecto

El proyecto se organiza de la siguiente manera:

• [Link]: Punto de entrada del programa.


• controllers/: Contiene los controladores de lógica de negocio.
• models/: Define las clases de datos para los empleados y otras entidades.
• views/: Contiene las interfaces de usuario.
• utils/: Módulos utilitarios, como configuraciones o herramientas de formateo.

Componentes Principales

1. EmployeeController

Este controlador maneja la lógica relacionada con los empleados, como la creación y el
listado de empleados.

2. EmployeeUI

La interfaz de usuario para interactuar con el sistema. Permite al usuario crear nuevos
empleados y listar los empleados existentes.

50
3. Employee (Modelo)

La clase Employee define la estructura de un empleado, incluyendo su identificación,


nombre y apellido.
4. Colorama

Se utiliza el módulo Colorama para cambiar los colores y estilos del texto en la terminal,
mejorando la presentación de la interfaz de usuario. 51

Uso

Para ejecutar el programa, simplemente ejecute [Link]. Esto iniciará la interfaz de


usuario del sistema, donde se pueden seleccionar diferentes opciones de menú para
interactuar con el sistema de gestión de empleados.

Personalización y Extensión

El sistema puede ser personalizado y extendido según sea necesario. Algunas posibles áreas
de mejora incluyen:

• Adición de funcionalidades adicionales, como la edición o eliminación de empleados.


• Mejoras en la presentación de la interfaz de usuario.
• Implementación de pruebas unitarias para garantizar la estabilidad del sistema.

Notas de Seguridad

• Se debe tener cuidado al manipular datos de empleados, asegurando que se sigan las
mejores prácticas de seguridad para proteger la información personal.
• La entrada del usuario debe ser validada para evitar posibles vulnerabilidades, como la
inyección de código.

Conclusiones

El Sistema de Gestión de Empleados proporciona una base sólida para administrar


empleados y puede ser extendido y adaptado según las necesidades del proyecto. Se
recomienda revisar el código existente y seguir las convenciones de codificación
establecidas al realizar modificaciones o extensiones.

Este manual del programador proporciona una visión general del sistema, sus componentes
y cómo pueden ser personalizados o extendidos.

Product
Sistema de Gestión de Productos 52
Introducción

Este manual proporciona una guía detallada para los desarrolladores que trabajan en el
Sistema de Gestión de Productos. El sistema permite la creación y el listado de productos,
proporcionando una interfaz de usuario simple a través de la terminal.

Estructura del Proyecto

El proyecto está organizado de la siguiente manera:

• [Link]: Punto de entrada del programa.


• controllers/: Contiene los controladores de lógica de negocio.
• models/: Define las clases de datos para los productos y otras entidades.
• views/: Contiene las interfaces de usuario.
• utils/: Módulos utilitarios, como configuraciones o herramientas de formateo.

Componentes Principales

1. ProductController

Este controlador maneja la lógica relacionada con los productos, como la creación y el
listado de productos.
2. ProductUI

La interfaz de usuario para interactuar con el sistema. Permite al usuario crear nuevos
productos y listar los productos existentes.

3. Product (Modelo) 53
La clase Product define la estructura de un producto, incluyendo su descripción, precio y
stock.
4. Colorama

Se utiliza el módulo Colorama para cambiar los colores y estilos del texto en la terminal,
mejorando la presentación de la interfaz de usuario.

Uso

Para ejecutar el programa, simplemente ejecute [Link]. Esto iniciará la interfaz de


usuario del sistema, donde se pueden seleccionar diferentes opciones de menú para
interactuar con el sistema de gestión de productos.

Personalización y Extensión

El sistema puede ser personalizado y extendido según sea necesario. Algunas posibles áreas
de mejora incluyen:

• Adición de funcionalidades adicionales, como la edición o eliminación de productos.


• Mejoras en la presentación de la interfaz de usuario.
• Implementación de pruebas unitarias para garantizar la estabilidad del sistema. 54
Notas de Seguridad

• Se debe tener cuidado al manipular datos de productos, asegurando que se sigan las
mejores prácticas de seguridad para proteger la información del producto.
• La entrada del usuario debe ser validada para evitar posibles vulnerabilidades, como la
inyección de código.

Conclusiones

El Sistema de Gestión de Productos proporciona una base sólida para administrar productos
y puede ser extendido y adaptado según las necesidades del proyecto. Se recomienda
revisar el código existente y seguir las convenciones de codificación establecidas al realizar
modificaciones o extensiones.

Este manual del programador proporciona una visión general del sistema, sus componentes
y cómo pueden ser personalizados o extendidos.
Sales
Sistema de Gestión de Ventas
Introducción

Este manual proporciona una guía detallada para los desarrolladores que trabajan en el
Sistema de Gestión de Ventas. El sistema permite realizar ventas, generando facturas
detalladas para cada transacción.

Estructura del Proyecto

El proyecto está organizado de la siguiente manera:

• [Link]: Punto de entrada del programa.


• controllers/: Contiene los controladores de lógica de negocio para clientes,
empleados, productos, ventas e invoices.
• models/: Define las clases de datos para las entidades del sistema.
• views/: Contiene las interfaces de usuario para interactuar con el sistema.
• utils/: Módulos utilitarios, como configuraciones o herramientas de formateo.

Componentes Principales
55
1. SalesController

Este controlador maneja la lógica relacionada con las ventas, incluyendo la creación de
nuevas ventas y la generación de facturas.

2. ProductController

Controlador para la gestión de productos, incluyendo la creación y listado de productos


disponibles para la venta.

3. ClientController y EmployeeController

Controladores para la gestión de clientes y empleados respectivamente. Se utilizan para


buscar clientes y empleados por su identificación.
4. InvoiceController

Controlador para la gestión de facturas. Genera facturas detalladas para cada venta
realizada.

5. SalesUI

La interfaz de usuario para interactuar con el sistema de gestión de ventas. Permite al


usuario realizar una venta, seleccionando productos, clientes y empleados, y genera una
factura detallada.

56
57

Uso

Para ejecutar el programa, simplemente ejecute [Link]. Esto iniciará la interfaz de


usuario del sistema, donde se pueden seleccionar diferentes opciones de menú para realizar
ventas y gestionar otras entidades del sistema.

Personalización y Extensión

El sistema puede ser personalizado y extendido según sea necesario. Algunas posibles áreas
de mejora incluyen:
• Adición de funcionalidades adicionales, como la edición o eliminación de ventas y
productos.
• Mejoras en la presentación de la interfaz de usuario y la generación de facturas.
• Implementación de autenticación de usuarios y roles para restringir el acceso a ciertas
funcionalidades.

Notas de Seguridad

• Se debe tener cuidado al manipular datos de clientes, empleados y ventas, asegurando


que se sigan las mejores prácticas de seguridad para proteger la información personal y
financiera.
• La entrada del usuario debe ser validada para evitar posibles vulnerabilidades, como la
inyección de código o SQL.

Conclusiones

El Sistema de Gestión de Ventas proporciona una herramienta robusta para realizar ventas
y generar facturas detalladas. Se recomienda revisar el código existente y seguir las
convenciones de codificación establecidas al realizar modificaciones o extensiones.

58
Este manual del programador proporciona una visión general del sistema, sus componentes
y cómo pueden ser personalizados o extendidos.

Ui
Sistema de Gestión de Tienda
Introducción

Este manual proporciona una guía detallada para los desarrolladores que trabajan en el
Sistema de Gestión de Tienda. El sistema proporciona una interfaz de usuario para
gestionar clientes, empleados, productos y ventas.

Estructura del Proyecto

El proyecto está organizado de la siguiente manera:

• [Link]: Punto de entrada del programa.


• view/: Contiene las interfaces de usuario para interactuar con el sistema.
• controllers/: Contiene los controladores para gestionar la lógica de negocio.
• models/: Define las clases de datos para las entidades del sistema.
• utils/: Módulos utilitarios, como configuraciones o herramientas de formateo.

Componentes Principales

1. Interfaz de Usuario (Menu)

La clase Menu proporciona una interfaz de usuario para que los usuarios interactúen con el
sistema. Permite realizar diversas acciones, como gestionar clientes, productos, ventas y
empleados.

59
2. Controladores

Los controladores (ClientController, EmployeeController, ProductController,


SalesController) manejan la lógica de negocio relacionada con la gestión de clientes,
empleados, productos y ventas respectivamente.
60

3. Modelos

Los modelos (Client, Employee, Product, Sale) definen la estructura de datos para las
entidades del sistema, como clientes, empleados, productos y ventas.

Uso

Para ejecutar el programa, simplemente ejecute [Link]. Esto iniciará la interfaz de


usuario del sistema, donde se pueden seleccionar diferentes opciones de menú para
gestionar la tienda.
Personalización y Extensión

El sistema puede ser personalizado y extendido según sea necesario. Algunas posibles áreas
de mejora incluyen:

• Adición de funcionalidades adicionales, como la edición o eliminación de clientes,


productos, empleados y ventas.
• Implementación de autenticación de usuarios para restringir el acceso a ciertas
funcionalidades.
• Mejoras en la presentación de la interfaz de usuario y la generación de informes.

Notas de Seguridad

• Se debe tener cuidado al manipular datos sensibles de clientes y empleados, asegurando


que se sigan las mejores prácticas de seguridad para proteger la información personal.
• La entrada del usuario debe ser validada para evitar posibles vulnerabilidades, como la
inyección de código o SQL.

Conclusiones

El Sistema de Gestión de Tienda proporciona una herramienta completa para gestionar una
61
tienda, desde la gestión de clientes y empleados hasta el seguimiento de productos y ventas.
Se recomienda revisar el código existente y seguir las convenciones de codificación
establecidas al realizar modificaciones o extensiones.

Este manual del programador proporciona una visión general del sistema, sus componentes
y cómo pueden ser personalizados o extendidos.
Main
Sistema de Interfaz de Usuario

Introducción

Este manual proporciona una guía para los desarrolladores que trabajarán en el desarrollo y
mantenimiento del sistema de interfaz de usuario. El sistema permite a los usuarios
interactuar con diferentes opciones a través de un menú interactivo.

Estructura del Proyecto

El proyecto está organizado de la siguiente manera:

- view/: Contiene los archivos relacionados con la interfaz de usuario.


62
- [Link]: Define la clase Menu que maneja la presentación del menú y las opciones
seleccionadas.

- Otros archivos y carpetas pueden estar presentes dependiendo de la implementación


específica.

Componentes Principales

1. Clase Menu ([Link])

La clase Menu maneja la presentación del menú principal y permite al usuario seleccionar
opciones. Contiene los siguientes métodos principales:

- welcome(): Muestra un mensaje de bienvenida al usuario.

- main(): Muestra el menú principal y solicita al usuario que seleccione una opción.
- select_option(opcion): Procesa la opción seleccionada por el usuario y ejecuta la acción
correspondiente.

Uso

Para utilizar el sistema de interfaz de usuario, sigue estos pasos:


63
1. Ejecución del Programa: Ejecuta el archivo [Link] para iniciar el programa.

2. Mensaje de Bienvenida: Se mostrará un mensaje de bienvenida al usuario.

3. Interacción con el Menú: El usuario podrá ver el menú principal y seleccionar una
opción.

4. Ejecución de Acciones: Cada opción del menú ejecutará una acción específica en el
sistema.

5. Repetición del Proceso: Después de cada acción, el usuario puede seleccionar otra
opción del menú o salir del programa.

Personalización y Extensión

El sistema de interfaz de usuario puede ser personalizado y extendido según sea necesario.
Algunas posibles áreas de mejora incluyen:
- Adición de nuevas opciones al menú para incorporar funcionalidades adicionales.

- Mejoras en la presentación del menú y la interfaz de usuario para hacerla más intuitiva y
atractiva.

- Implementación de manejo de errores y validación de entrada para mejorar la robustez del


sistema.

Notas de Seguridad

- Se debe validar la entrada del usuario para evitar posibles vulnerabilidades, como la
inyección de código o SQL.

- Se debe tener cuidado al manejar datos sensibles del usuario, como contraseñas o
información personal.

Conclusiones

El Sistema de Interfaz de Usuario proporciona una forma fácil y accesible para que los
usuarios interactúen con el sistema y realicen diferentes acciones. Se recomienda revisar y 64
mantener el código de manera regular para garantizar su correcto funcionamiento y
seguridad. Este manual del programador proporciona una visión general del sistema de
interfaz de usuario, sus componentes y cómo pueden ser utilizados y mejorados.

También podría gustarte