Diagramas y narrativa para presentarle a laureano

This commit is contained in:
2024-01-01 16:25:39 -03:00
commit eb37573b9b
5 changed files with 401 additions and 0 deletions

BIN
DiagramaConRepos.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

257
DiagramaDeClases.org Normal file
View File

@@ -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 <where T: ProductoBase> {
+ 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<T> {
+ 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<Presupuestos>?
+ Habilitado: bool
+ MostrarPresupuestos(): ReadOnlyCollection<Presupuesto>
+ 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<Detalle>
+ MostrarDetalles(): ReadOnlyCollection<Detalle>
+ AñadirDetalle(Detalle): void
+ ModificarDetalle(Detalle): void
+ EliminarDetalle(Detalle): void
}
class Detalle <where T: ProductoBase>{
+ 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<Presupuestos>?
+ Habilitado: bool
+ MostrarPresupuestos(): ReadOnlyCollection<Presupuesto>
+ 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<Detalle>
+ MostrarDetalles(): ReadOnlyCollection<Detalle>
+ AñadirDetalle(Detalle): void
+ ModificarDetalle(Detalle): void
+ EliminarDetalle(Detalle): void
}
class Detalle <where T: ProductoBase>{
+ 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]]

BIN
DiagramaSinRepos.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

144
final.org Normal file
View File

@@ -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<Presupuestos>?
+ 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.

BIN
final.pdf Normal file

Binary file not shown.