# Ronny Dener Callisaya Huaraz
Import csv
From models import Tienda, Producto
From transactions import procesar_transacciones
Def main():
Tienda = Tienda()
Tienda.cargar_productos(‘[Link]’)
Procesar_transacciones(‘[Link]’, tienda)
Tienda.mostrar_estadisticas()
If __name__ == “__main__”:
Main()
# Ronny Dener Callisaya Huaray
From dataclasses import dataclass
Import csv
@dataclass(frozen=True)
Class EntradaLog:
Tipo_transaccion: int
Cantidad: int
Monto_vendido: float
Total_impuesto: float
Producto_vendido: str
Fecha: str
Def registrar_transaccion(log: EntradaLog):
With open(‘[Link]’, mode=’a’, newline=’’) as file:
Writer = [Link](file)
[Link]([
Log.tipo_transaccion,
[Link],
Log.monto_vendido,
Log.total_impuesto,
Log.producto_vendido,
[Link]
])
# Ronny Dener Callisaya Huaray
Import json
From dataclasses import dataclass
From datetime import datetime
@dataclass
Class Producto:
Nombre: str
Tipo: int
Valor_unitario: float
Cantidad_inicial: int
Cantidad_minima: int
Class Tienda:
Def __init__(self):
[Link] = {}
Self.cargar_impuestos()
Def cargar_impuestos(self):
With open(‘[Link]’, ‘r’) as file:
[Link] = [Link](file)
Def cargar_productos(self, archivo):
With open(archivo, mode=’r’) as file:
Reader = [Link](file)
For row in reader:
Nombre, tipo, valor_unitario, cantidad_inicial, cantidad_minima = row
Producto = Producto(
Nombre=nombre,
Tipo=int(tipo),
Valor_unitario=float(valor_unitario),
Cantidad_inicial=int(cantidad_inicial),
Cantidad_minima=int(cantidad_minima) )
[Link][nombre] = producto
Def vender_producto(self, nombre, cantidad):
If nombre in [Link]:
Producto = [Link][nombre]
If producto.cantidad_inicial >= cantidad:
Producto.cantidad_inicial -= cantidad
Monto_vendido = cantidad * producto.valor_unitario * (1 +
[Link][str([Link])][1] / 100)
Total_impuesto = monto_vendido – (cantidad * producto.valor_unitario)
Self.registrar_transaccion(1, nombre, cantidad, monto_vendido, total_impuesto)
Return True
Else:
Return False
Return False
Def ingreso_mercaderia(self, nombre, cantidad):
If nombre in [Link]:
Producto = [Link][nombre]
Producto.cantidad_inicial += cantidad
Self.registrar_transaccion(2, nombre, cantidad, 0, 0)
Return True
Return False
Def registrar_transaccion(self, tipo_transaccion, nombre, cantidad, monto_vendido,
total_impuesto):
From logfile import EntradaLog, registrar_transaccion
Log = EntradaLog(
Tipo_transaccion=tipo_transaccion,
Cantidad=cantidad,
Monto_vendido=monto_vendido,
Total_impuesto=total_impuesto,
Producto_vendido=nombre,
Fecha=[Link]().strftime(“%Y-%m-%d %H:%M:%S”)
)
Registrar_transaccion(log)
Def mostrar_estadisticas(self):
Total_vendido = sum(producto.valor_unitario * producto.cantidad_inicial for producto in
[Link]())
Total_unidades_vendidas = sum(producto.cantidad_inicial for producto in
[Link]())
If total_unidades_vendidas > 0:
Promedio_ventas = total_vendido / total_unidades_vendidas
Else:
Promedio_ventas = 0
Print(f”Total vendido: {total_vendido}”)
Print(f”Promedio de ventas: {promedio_ventas}”)
Producto_mas_vendido = max([Link](), key=lambda p: p.cantidad_inicial)
Producto_menos_vendido = min([Link](), key=lambda p:
p.cantidad_inicial)
Print(f”Producto m�s vendido: {producto_mas_vendido.nombre}”)
Print(f”Producto menos vendido: {producto_menos_vendido.nombre}”)
Menos vendido: {producto_menos_vendido.nombre}”)
# Ronny Dener Callisaya Huaray
Import csv
Def procesar_transacciones(archivo, tienda):
With open(archivo, mode=’r’) as file:
Reader = [Link](file)
For row in reader:
Tipo_transaccion, nombre, cantidad = row
If int(tipo_transaccion) == 1:
Tienda.vender_producto(nombre, int(cantidad))
Elif int(tipo_transaccion) == 2:
Tienda.ingreso_mercaderia(nombre, int(cantidad))