commit eb37573b9b1d86a6e633c95da1c160a24c48f63e Author: fede Date: Mon Jan 1 16:25:39 2024 -0300 Diagramas y narrativa para presentarle a laureano diff --git a/DiagramaConRepos.jpg b/DiagramaConRepos.jpg new file mode 100644 index 0000000..19229d1 Binary files /dev/null and b/DiagramaConRepos.jpg differ diff --git a/DiagramaDeClases.org b/DiagramaDeClases.org new file mode 100644 index 0000000..a4d7f0a --- /dev/null +++ b/DiagramaDeClases.org @@ -0,0 +1,257 @@ +#+title: Diagrama De Clases +#+LATEX_HEADER: \usepackage{svg} + +* Diagrama de clases con Repositorios +#+begin_src plantuml :file DiagramaConRepos.jpg +@startuml +skinparam groupInheritance 2 + +class RepositorioDetalles { ++ Añadir(detalle): bool ++ Modificar(detalle): bool ++ Eliminar(detalle): bool +} + +RepositorioDetalles "1" *-- "0..*" Detalle + +class RepositorioFacturas { ++ Añadir(Factura): bool ++ Modificar(Factura): bool ++ Eliminar(Factura): bool +} + +RepositorioFacturas "1" *-- "0..*" Factura + +class RepositorioVentas { ++ Añadir(Venta): bool ++ Modificar(Venta): bool ++ Eliminar(Venta): bool +} + +RepositorioVentas "1" *-- "0..*" Venta + +class RepositorioClientes { ++ Añadir(Cliente): bool ++ Modificar(Cliente): bool ++ Eliminar(Cliente): bool +} + +RepositorioClientes "1" *-- "0..*" Cliente + +class RepositorioProveedores { ++ Añadir(Proveedor): bool ++ Modificar(Proveedor): bool ++ Eliminar(Proveedor): bool +} + +class RepositorioPresupuestos { ++ Añadir(Presupuesto): bool ++ Modificar(Presupuesto): bool ++ Eliminar(Presupuesto): bool +} + +class RepositorioProductos { ++ Añadir(T): bool ++ Modificar(T): bool ++ Eliminar(T): bool +} + +RepositorioProductos ..|> Repositorio: Implementa +RepositorioPresupuestos ..|> Repositorio: Implementa +RepositorioFacturas ..|> Repositorio: Implementa +RepositorioClientes ..|> Repositorio: Implementa +RepositorioVentas ..|> Repositorio: Implementa +RepositorioDetalles ..|> Repositorio: Implementa +RepositorioProveedores ..|> Repositorio: Implementa + +interface Repositorio { ++ Añadir(T): bool ++ Modificar(T): bool ++ Eliminar(T): bool +} + +RepositorioProductos "1" *--> "0..*" ProductoNoPercedero +RepositorioProductos "1" *--> "0..*" ProductoPercedero + +class ProductoNoPercedero { ++ FechaElaboracion: DateTime ++ FechaCaducacion: DateTime +} + +class ProductoPercedero { ++ FechaVencimiento: DateTime +} + +ProductoBase <|-- ProductoNoPercedero +ProductoBase <|-- ProductoPercedero + +class ProductoBase { ++ id: int ++ Nombre: string ++ Precio: double +- PresupuestosStock: List? ++ Habilitado: bool + ++ MostrarPresupuestos(): ReadOnlyCollection ++ AñadirPresupuesto(Presupuesto): bool ++ EliminarPresupuesto(Presupuesto): bool +} + +class Presupuesto { ++ id: int ++ Proveedor: Proveedor ++ Monto: int ++ Cantidad: int +} + +RepositorioPresupuestos "1" *-- "0..*" Presupuesto +RepositorioProveedores "1" *-- "0..*" Proveedor + +Presupuesto "0..*" o-- "1" ProductoNoPercedero +Presupuesto "0..*" o-- "1" ProductoPercedero +Proveedor "1" *-- "0..*" Presupuesto + +class Proveedor { ++ id: int ++ Nombre: string ++ RazónSocial: string +} + +class Venta { ++ id: int +- Detalles: List + ++ MostrarDetalles(): ReadOnlyCollection ++ AñadirDetalle(Detalle): void ++ ModificarDetalle(Detalle): void ++ EliminarDetalle(Detalle): void +} + +class Detalle { ++ id: int ++ Cantidad: int ++ PrecioUnitario: double ++ Subtotal: double ++ Producto: T +} + +class Cliente { ++ Cuit: string ++ Nombre: string ++ Apellido: string ++ Direccion: string ++ Correo: string +} + +class Factura { ++ Total: double ++ Fecha: DateTime ++ Cliente: Cliente ++ Venta: Venta +} + +Cliente <-- Factura +Factura --> Venta +Venta "1" *-- "1..*" Detalle + +Detalle --> ProductoNoPercedero +Detalle --> ProductoPercedero + +@enduml +#+end_src + +#+RESULTS: +[[file:DiagramaConRepos.jpg]] + +* Diagrama de clases sin Repositorios +#+begin_src plantuml :file DiagramaSinRepos.jpg +@startuml +skinparam groupInheritance 2 + +class ProductoNoPercedero { ++ FechaElaboracion: DateTime ++ FechaCaducacion: DateTime +} + +class ProductoPercedero { ++ FechaVencimiento: DateTime +} + +ProductoBase <|-- ProductoNoPercedero +ProductoBase <|-- ProductoPercedero + +class ProductoBase { ++ id: int ++ Nombre: string ++ Precio: double +- PresupuestosStock: List? ++ Habilitado: bool + ++ MostrarPresupuestos(): ReadOnlyCollection ++ AñadirPresupuesto(Presupuesto): bool ++ EliminarPresupuesto(Presupuesto): bool +} + +class Presupuesto { ++ id: int ++ Proveedor: Proveedor ++ Monto: int ++ Cantidad: int +} + +Presupuesto "0..*" o-- "1" ProductoNoPercedero +Presupuesto "0..*" o-- "1" ProductoPercedero +Proveedor "1" *-- "0..*" Presupuesto + +class Proveedor { ++ id: int ++ Nombre: string ++ RazónSocial: string +} + +class Venta { ++ id: int +- Detalles: List + ++ MostrarDetalles(): ReadOnlyCollection ++ AñadirDetalle(Detalle): void ++ ModificarDetalle(Detalle): void ++ EliminarDetalle(Detalle): void +} + +class Detalle { ++ id: int ++ Cantidad: int ++ PrecioUnitario: double ++ Subtotal: double ++ Producto: T +} + +class Cliente { ++ Cuit: string ++ Nombre: string ++ Apellido: string ++ Direccion: string ++ Correo: string +} + +class Factura { ++ Total: double ++ Fecha: DateTime ++ Cliente: Cliente ++ Venta: Venta +} + +Cliente <-- Factura +Factura --> Venta +Venta "1" *-- "1..*" Detalle + +Detalle --> ProductoNoPercedero +Detalle --> ProductoPercedero + +@enduml + +#+end_src + +#+RESULTS: +[[file:DiagramaSinRepos.jpg]] diff --git a/DiagramaSinRepos.jpg b/DiagramaSinRepos.jpg new file mode 100644 index 0000000..a1f42b4 Binary files /dev/null and b/DiagramaSinRepos.jpg differ diff --git a/final.org b/final.org new file mode 100644 index 0000000..1c380f9 --- /dev/null +++ b/final.org @@ -0,0 +1,144 @@ +#+title: Proyecto Final OOP +#+author: Federico Polidoro & Ignacio Diana +#+options: date:nil +#+LATEX_HEADER: \usepackage{svg} + +* Sistema de Gestion de Stock y Proveedores para una Distribuidora Mayorista +El target de nuestro sistema son Mayoristas que aún no tengan un sistema para: +- Gestionar el stock de mercaderia restante, (Ventas y Compras). +- Registro de Productos en venta, sus respectivos proveedores, Y los presupuestos que nos dan estos para reponer nuestro stock. +- Almacenar las ventas realizadas a clientes. + + +y esten en busqueda de =Digitalizar= o =Automatizar= dichas secciones de su negocio. + +** A continuacion se expandirá sobre las funcionalidades del sistema +*** Registro de productos en venta +La dada de alta de un producto se dividirá sobre si un producto es percedero o no requerirá de que se ingresen con los siguientes datos para registrar un producto: +#+begin_src plantuml :file ProductoIngreso.svg +@startuml +class ProductoBase { ++ id: int ++ Nombre: string ++ Precio: double +- PresupuestosStock: List? ++ Habilitado: bool + ++ AñadirPresupuesto(Presupuesto): bool ++ EliminarPresupuesto(Presupuesto): bool +} +@enduml +#+end_src + +#+ATTR_LATEX: :width 8cm +#+RESULTS: +[[file:ProductoIngreso.svg]] + +Además de en caso de ser percedero se requerirá una fecha de caducacidad: +#+begin_src plantuml :file ProductoPercedero.svg +@startuml +class ProductoPercedero { ++ FechaVencimiento: DateTime +} + +class ProductoBase {} +ProductoBase <|-- ProductoPercedero +@enduml +#+end_src + +#+ATTR_LATEX: :width 8cm +#+RESULTS: +[[file:ProductoPercedero.svg]] + +Mientras que uno *no* percedero necesita fecha de Elaboracion también: +#+begin_src plantuml :file ProductoNoPercedero.svg +@startuml +class ProductoNoPercedero { ++ FechaElaboracion: DateTime ++ FechaCaducacion: DateTime +} + +class ProductoBase {} +ProductoBase <|-- ProductoNoPercedero +@enduml +#+end_src + +#+ATTR_LATEX: :width 8cm +#+RESULTS: +[[file:ProductoNoPercedero.svg]] + +NOTA: no es necesario cargar los presupuestos que nos hacen los proveedores por renovar el stock de un producto pero es recomendado para que sea más facil calcular los gastos de esa operacion. + +*** Registro de proveedores +Los proveedores se pueden cargar en el sistema, y cada proveedor nos da un presupuesto para renovar el stock de un producto. + + +Para cargar un Proveedor en el sistema se necesita: +#+begin_src plantuml :file ProveedorCarga.svg +class Proveedor { ++ id: int ++ Nombre: string ++ RazónSocial: string +} +#+end_src + +#+ATTR_LATEX: :width 5cm +#+RESULTS: +[[file:ProveedorCarga.svg]] + +*** Registro de Presupuestos +Los presupuestos son dados por los proveedores sobre uno de los productos en venta que tenemos, para poder registrar uno este debe de estar asociado a un proveedor, mostrar el monto propuesto y la cantidad de productos ofresidos. +#+begin_src plantuml :file Presupuesto.svg +class Presupuesto { ++ id: int ++ Proveedor: Proveedor ++ Monto: int ++ Cantidad: int +} + +#+end_src + +#+ATTR_LATEX: :width 5cm +#+RESULTS: +[[file:Presupuesto.svg]] +*No* permitimos que sean modificados una vez cargados. + +*** Registro de Clientes +Para poder Registrar una Compra por parte de un cliente vamos a necesitar que el cliente en cuestión se registre en el sistema: +#+begin_src plantuml :file ClienteRegistro.svg +class Cliente { ++ Cuit: int ++ Nombre: string ++ Apellido: string ++ Direccion: string ++ Correo: string +} +#+end_src + +#+ATTR_LATEX: :width 5cm +#+RESULTS: +[[file:ClienteRegistro.svg]] + +*** Modificar de Clientes +Esta opcion existe en caso de que se necesite cambiar los datos de Nombre, Apellido, Direccion o Correo. No es posible cambiar el Cuit. + +*** Modificar y Baja lógica de Proveedores +Desde el sistema se podrá dar una baja lógica de un proveedor, o cambiar los datos de uno en caso de que el proveedor sea adquirido por otra empresa o cambie de nombre. + +En caso de que el proveedor deje de estar en el mercado tambien es posible de darle una baja lógica en el sistema. + +*** Baja lógica de Presupuestos +Es necesario que los presupuestos puedan ser dados de baja para que los nuevos presupuestos puedan reemplazar a los viejos. + +*** Modificar y Baja lógica de Productos +Tanto el Nombre, Precio y sus posibles proveedores podrán ser modificados. + +La Baja de un producto se hace por medio de una baja lógica. + +*** Control de Stock (Ventas) +Cuando nos llegue que se efectuó una venta, El sistema creará una factura con sus detalles y se deducirá tantos productos del registro en el stock, como los especificados en los detalles de la venta. + +*** Control de Stock (Compra) +Se podrá seleccionar un producto y elejir cual de las diferentes ofertas (Presupuestos) dadas por los proveedores vamos a comprar para reponer nuestro stock. + +Una vez confirmada la compra el stock de un producto se incrementará por la cantidad de productos comprados. diff --git a/final.pdf b/final.pdf new file mode 100644 index 0000000..c8b5998 Binary files /dev/null and b/final.pdf differ