Coverage for backend \ app \ ParametrosSistema \ repositories \ parametroSistemaRepository.py: 21.43%

56 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-29 16:13 -0500

1from app.ParametrosSistema.models.parametroSistemaModel import ParametroSistema 

2from app.ParametrosSistema.schemas.parametroSistemaSchemas import * 

3 

4class ParametroSistemaRepository: 

5 def __init__(self, dbSession): 

6 self.dbSession = dbSession 

7 

8 def listarParametros(self): 

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

10 

11 def obtenerPorId(self, idParametro: int): 

12 return self.dbSession.query(ParametroSistema).filter(ParametroSistema.idParametroSistema == idParametro).first() 

13 

14 def validarClaveExistente(self, clave: str, excluirId: int = None): 

15 query = self.dbSession.query(ParametroSistema).filter(ParametroSistema.claveParametro == clave) 

16 if excluirId is not None: 

17 query = query.filter(ParametroSistema.idParametroSistema != excluirId) 

18 return query.first() 

19 

20 def crearParametro(self, parametro: ParametroSistemaCrearSchema): 

21 if self.validarClaveExistente(parametro.claveParametro): 

22 return None 

23 nuevo = ParametroSistema(claveParametro=parametro.claveParametro, valorParametro=parametro.valorParametro) 

24 self.dbSession.add(nuevo) 

25 self.dbSession.commit() 

26 self.dbSession.refresh(nuevo) 

27 return nuevo 

28 

29 def modificarParametro(self, idParametro: int, parametroActualizar: ParametroSistemaActualizarSchema): 

30 parametro = self.obtenerPorId(idParametro) 

31 if not parametro: 

32 return None 

33 datos = parametroActualizar.model_dump(exclude_unset=True) 

34 # Validar que la nueva clave (si viene) no exista en otro registro 

35 if "claveParametro" in datos: 

36 claveNueva = datos["claveParametro"] 

37 # Buscar por clave sin excluir y verificar explícitamente el id 

38 existente = self.validarClaveExistente(claveNueva) 

39 if existente and existente.idParametroSistema != idParametro: 

40 # Retornar bandera False para indicar conflicto de clave 

41 return False 

42 for campo, valor in datos.items(): 

43 if campo in ["claveParametro", "valorParametro"]: 

44 setattr(parametro, campo, valor) 

45 self.dbSession.commit() 

46 self.dbSession.refresh(parametro) 

47 return parametro 

48 

49 def deshabilitarParametro(self, idParametro: int): 

50 parametro = self.obtenerPorId(idParametro) 

51 if not parametro: 

52 return None 

53 parametro.activoParametro = False 

54 self.dbSession.commit() 

55 self.dbSession.refresh(parametro) 

56 return parametro 

57 

58 def crearParametrosIniciales(self): 

59 parametrosIniciales = [ 

60 {"claveParametro": "nombreNegocio", "valorParametro": "DALCT Market"}, 

61 {"claveParametro": "direccionNegocio", "valorParametro": "Quito, Av. Morán Valverde y OE3H"}, 

62 {"claveParametro": "telefonoNegocio", "valorParametro": "02-3450538"}, 

63 {"claveParametro": "correoNegocio", "valorParametro": "contacto@dalctmarket.com"}, 

64 {"claveParametro": "IVA", "valorParametro": "15"}, 

65 {"claveParametro": "logoNegocio", "valorParametro": "/static/logo.png"}, 

66 ] 

67 

68 for p in parametrosIniciales: 

69 existe = self.validarClaveExistente(p["claveParametro"]) 

70 if not existe: 

71 nuevo = ParametroSistema(**p) 

72 self.dbSession.add(nuevo) 

73 print("Parámetros por defecto creados...!") 

74 self.dbSession.commit() 

75 self.dbSession.close()