22
33
44class AsignacionService :
5- # Servicio para gestionar asignaciones de empleados a tareas
6-
5+ """ Servicio para gestionar asignaciones de tareas a empleados"""
6+
77 def __init__ (self , manejador_persistencia ):
8- # Constructor: recibe el manejador de persistencia
98 self .manejador_persistencia = manejador_persistencia
109
1110 def _cargar (self ):
12- # Carga los datos desde el manejador de persistencia
11+ """ Carga los datos desde el manejador de persistencia"""
1312 return self .manejador_persistencia .cargar_datos ()
1413
1514 def _guardar (self , datos ):
16- # Guarda los datos en el manejador de persistencia
15+ """ Guarda los datos en el manejador de persistencia"""
1716 self .manejador_persistencia .guardar_datos (datos )
1817
1918 def crear (self , id_tarea , id_empleado ):
20- # Crea una nueva asignación con horas iniciales en 0
19+ """Crea una nueva asignación con horas iniciales en 0"""
20+
2121 datos = self ._cargar ()
2222 nuevo_id = self .manejador_persistencia .obtener_proximo_id (datos ["asignaciones" ])
2323 asignacion = Asignacion (nuevo_id , id_tarea , id_empleado , horas = 0.0 )
@@ -26,18 +26,21 @@ def crear(self, id_tarea, id_empleado):
2626 return asignacion
2727
2828 def obtener_todos (self ):
29- # Retorna todas las asignaciones
29+ """Retorna todas las asignaciones"""
30+
3031 datos = self ._cargar ()
3132 return [Asignacion .from_dict (a ) for a in datos ["asignaciones" ]]
3233
3334 def obtener_por_id (self , id_asignacion ):
34- # Obtiene una asignación por su ID
35+ """Obtiene una asignación por su ID"""
36+
3537 datos = self ._cargar ()
3638 asignacion = next ((a for a in datos ["asignaciones" ] if a ["id" ] == id_asignacion ), None )
3739 return Asignacion .from_dict (asignacion ) if asignacion else None
3840
3941 def obtener_por_tarea (self , id_tarea ):
40- # Obtiene todas las asignaciones de una tarea específica
42+ """Obtiene todas las asignaciones de una tarea específica"""
43+
4144 datos = self ._cargar ()
4245 return [
4346 Asignacion .from_dict (a )
@@ -46,20 +49,22 @@ def obtener_por_tarea(self, id_tarea):
4649 ]
4750
4851 def obtener_por_tarea_y_empleado (self , id_tarea , id_empleado ):
49- # Obtiene una asignación por tarea y empleado
52+ """Obtiene una asignación por tarea y empleado"""
53+
5054 datos = self ._cargar ()
5155 asignacion = next (
5256 (
5357 a
5458 for a in datos ["asignaciones" ]
5559 if a ["id_tarea" ] == id_tarea and a ["id_empleado" ] == id_empleado
5660 ),
57- None ,
61+ None
5862 )
5963 return Asignacion .from_dict (asignacion ) if asignacion else None
6064
6165 def obtener_por_empleado (self , id_empleado ):
62- # Obtiene todas las asignaciones de un empleado específico
66+ """Obtiene todas las asignaciones de un empleado específico"""
67+
6368 datos = self ._cargar ()
6469 return [
6570 Asignacion .from_dict (a )
@@ -68,7 +73,8 @@ def obtener_por_empleado(self, id_empleado):
6873 ]
6974
7075 def agregar_horas (self , id_tarea , id_empleado , horas ):
71- # Agrega horas a una asignación (solo valida horas ingresadas, no el total)
76+ """Agrega horas a una asignación"""
77+
7278 if not isinstance (horas , (int , float )):
7379 raise ValueError ("Las horas deben ser un número." )
7480 if horas < 0 or horas > 12 :
@@ -81,7 +87,7 @@ def agregar_horas(self, id_tarea, id_empleado, horas):
8187 for a in datos ["asignaciones" ]
8288 if a ["id_tarea" ] == id_tarea and a ["id_empleado" ] == id_empleado
8389 ),
84- None ,
90+ None
8591 )
8692
8793 if asignacion is None :
@@ -98,15 +104,16 @@ def agregar_horas(self, id_tarea, id_empleado, horas):
98104 return True
99105
100106 def actualizar_horas (self , id_asignacion , horas ):
101- # Actualiza el total de horas de una asignación existente
107+ """Actualiza el total de horas de una asignación existente"""
108+
102109 if not isinstance (horas , (int , float )):
103110 raise ValueError ("Las horas deben ser un número." )
104111 if horas < 0 or horas > 12 :
105112 raise ValueError ("No se pueden registrar más de 12 horas al día." )
106113
107114 datos = self ._cargar ()
108115 asignacion = next ((a for a in datos ["asignaciones" ] if a ["id" ] == id_asignacion ), None )
109-
116+
110117 if not asignacion :
111118 return False
112119
@@ -115,13 +122,14 @@ def actualizar_horas(self, id_asignacion, horas):
115122 return True
116123
117124 def eliminar (self , id_asignacion ):
118- # Elimina una asignación por su ID
125+ """Elimina una asignación por su ID"""
126+
119127 datos = self ._cargar ()
120128 asignacion = next ((a for a in datos ["asignaciones" ] if a ["id" ] == id_asignacion ), None )
121-
122129 if not asignacion :
123130 return False
124131
132+ # Elimina la asignación
125133 datos ["asignaciones" ] = [a for a in datos ["asignaciones" ] if a ["id" ] != id_asignacion ]
126134 self ._guardar (datos )
127135 return True
0 commit comments