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

1from app.Productos.models.proveedorModel import Proveedor 

2from app.Productos.schemas.proveedorSchemas import * 

3 

4class ProveedorRepository: 

5 def __init__(self, dbSession): 

6 self.dbSession = dbSession 

7 

8 def listarProveedores(self): 

9 return self.dbSession.query(Proveedor).all() 

10 

11 def obtenerPorId(self, idProveedor: int): 

12 return self.dbSession.query(Proveedor).filter(Proveedor.idProveedor == idProveedor).first() 

13 

14 def validarRucExistente(self, ruc: str): 

15 return self.dbSession.query(Proveedor).filter(Proveedor.ruc == ruc).first() 

16 

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 

32 

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 

45 

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 

59 

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 ] 

68 

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()