Coverage for backend \ app \ Productos \ repositories \ proveedorRepository.py: 20.75%
53 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-29 16:13 -0500
1from app.Productos.models.proveedorModel import Proveedor
2from app.Productos.schemas.proveedorSchemas import *
4class ProveedorRepository:
5 def __init__(self, dbSession):
6 self.dbSession = dbSession
8 def listarProveedores(self):
9 return self.dbSession.query(Proveedor).all()
11 def obtenerPorId(self, idProveedor: int):
12 return self.dbSession.query(Proveedor).filter(Proveedor.idProveedor == idProveedor).first()
14 def validarRucExistente(self, ruc: str):
15 return self.dbSession.query(Proveedor).filter(Proveedor.ruc == ruc).first()
17 def crearProveedor(self, proveedor: ProveedorCrearSchema):
18 if self.validarRucExistente(proveedor.ruc):
19 return None
20 nuevo = Proveedor(
21 razonSocial=proveedor.razonSocial,
22 ruc=proveedor.ruc,
23 direccionProveedor=proveedor.direccionProveedor,
24 telefonoProveedor=proveedor.telefonoProveedor,
25 emailProveedor=proveedor.emailProveedor,
26 activoProveedor=True
27 )
28 self.dbSession.add(nuevo)
29 self.dbSession.commit()
30 self.dbSession.refresh(nuevo)
31 return nuevo
33 def modificarProveedor(self, idProveedor: int, proveedorActualizar: ProveedorActualizarSchema):
34 proveedor = self.obtenerPorId(idProveedor)
35 if not proveedor:
36 return None
37 datos = proveedorActualizar.model_dump(exclude_unset=True)
38 camposValidos = ["razonSocial", "direccionProveedor", "telefonoProveedor", "emailProveedor", "activoProveedor"]
39 for campo, valor in datos.items():
40 if campo in camposValidos:
41 setattr(proveedor, campo, valor)
42 self.dbSession.commit()
43 self.dbSession.refresh(proveedor)
44 return proveedor
46 def deshabilitarProveedor(self, idProveedor: int):
47 proveedor = self.obtenerPorId(idProveedor)
48 if not proveedor:
49 return None
50 # Verificar que no existan productos activos asociados
51 from app.Productos.models.productoModel import Producto
52 productoActivo = self.dbSession.query(Producto).filter(Producto.idProveedor == idProveedor, Producto.activoProducto == True).first()
53 if productoActivo:
54 return False
55 proveedor.activoProveedor = False
56 self.dbSession.commit()
57 self.dbSession.refresh(proveedor)
58 return proveedor
60 def crearProveedoresIniciales(self):
61 proveedores = [
62 {"razonSocial": "Distribuidora Andina de Bebidas S.A.", "ruc": "1790012345001", "direccionProveedor": "Av. Maldonado y Morán Valverde, Quito", "telefonoProveedor": "0991234567", "emailProveedor": "ventas@andinabebidas.com", "activoProveedor": True},
63 {"razonSocial": "Snacks del Valle Cía. Ltda.", "ruc": "1790023456001", "direccionProveedor": "Av. Galo Plaza Lasso, Quito", "telefonoProveedor": "0987654321", "emailProveedor": "contacto@snacksdelvalle.com", "activoProveedor": True},
64 {"razonSocial": "Abarrotes Quito Comercial AQ S.A.", "ruc": "1790034567001", "direccionProveedor": "Av. América y Naciones Unidas, Quito", "telefonoProveedor": "0974567890", "emailProveedor": "ventas@abarrotesaq.com", "activoProveedor": True},
65 {"razonSocial": "Limpieza Total Ecuador LT S.A.", "ruc": "1790045678001", "direccionProveedor": "Av. Mariscal Sucre, Quito", "telefonoProveedor": "0962345678", "emailProveedor": "ventas@limpiezatotal.com", "activoProveedor": True},
66 {"razonSocial": "Higiene y Cuidado Personal HC S.A.", "ruc": "1790056789001", "direccionProveedor": "Av. Simón Bolívar, Quito", "telefonoProveedor": "0956781234", "emailProveedor": "contacto@higienepersonalhc.com", "activoProveedor": True},
67 ]
69 for p in proveedores:
70 existe = self.validarRucExistente(p["ruc"])
71 if not existe:
72 nuevo = Proveedor(**p)
73 self.dbSession.add(nuevo)
74 print("Proveedores por defecto creados...!")
75 self.dbSession.commit()
76 self.dbSession.close()