Skip to content

Commit 2f39d5a

Browse files
Merge pull request #46 from DanielYanes-YH25001/fix/correccion-prs-33-34-42-y-44
Correción de pull requests 33, 34, 42 y 44
2 parents 12cc32e + b344976 commit 2f39d5a

16 files changed

Lines changed: 157 additions & 164 deletions

models/asignacion.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Asignacion:
2-
"""Clase para crear la asignacion de proyecto, con las validaciones"""
2+
"""Clase para modelar una asignación"""
33

4-
def __init__(self, id, id_tarea, id_empleado, horas=0.0):
4+
def __init__(self, id, id_tarea, id_empleado, horas = 0.0):
55
if not isinstance(id, int) or id <= 0:
66
raise ValueError("El ID de la asignación debe ser un entero positivo.")
77
if not isinstance(id_tarea, int) or id_tarea <= 0:
@@ -18,29 +18,23 @@ def __init__(self, id, id_tarea, id_empleado, horas=0.0):
1818

1919
def to_dict(self):
2020
"""Método para guardar los datos en JSON"""
21-
2221
return {
2322
"id": self.id,
2423
"id_tarea": self.id_tarea,
2524
"id_empleado": self.id_empleado,
26-
"horas": self.horas,
25+
"horas": self.horas
2726
}
2827

2928
@classmethod
3029
def from_dict(cls, data):
31-
"""Método de clase para traer una asigancion"""
32-
30+
"""Método de clase para traer una asignación"""
3331
return cls(
34-
id=data["id"],
35-
id_tarea=data["id_tarea"],
36-
id_empleado=data["id_empleado"],
37-
horas=data.get("horas", 0.0),
32+
id = data["id"],
33+
id_tarea = data["id_tarea"],
34+
id_empleado = data["id_empleado"],
35+
horas = data.get("horas", 0.0)
3836
)
3937

4038
def __str__(self):
41-
"""Método para imprimir los atributos de la asignacion"""
42-
43-
return (
44-
f"Asignacion(id={self.id}, id_tarea={self.id_tarea}, "
45-
f"id_empleado={self.id_empleado}, horas={self.horas})"
46-
)
39+
"""Método para imprimir los atributos de la asignación"""
40+
return f"Asignacion(id={self.id}, id_tarea={self.id_tarea}, id_empleado={self.id_empleado}, horas={self.horas})"

models/empleado.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Empleado:
2-
"""Clase para crear el empleado, con las validaciones"""
2+
"""Clase para modelar un empleado"""
33

44
def __init__(self, id, nombre, rol):
55
if not isinstance(id, int) or id <= 0:
@@ -15,24 +15,21 @@ def __init__(self, id, nombre, rol):
1515

1616
def to_dict(self):
1717
"""Método para guardar los datos en JSON"""
18-
1918
return {
2019
"id": self.id,
2120
"nombre": self.nombre,
22-
"rol": self.rol,
21+
"rol": self.rol
2322
}
2423

2524
@classmethod
2625
def from_dict(cls, data):
2726
"""Método de clase para traer un empleado"""
28-
2927
return cls(
30-
id=data["id"],
31-
nombre=data["nombre"],
32-
rol=data["rol"],
28+
id = data["id"],
29+
nombre = data["nombre"],
30+
rol = data["rol"]
3331
)
3432

3533
def __str__(self):
3634
"""Método para imprimir los datos de un empleado"""
37-
3835
return f"Empleado(id={self.id}, nombre='{self.nombre}', rol='{self.rol}')"

models/proyecto.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,35 @@
11
class Proyecto:
2-
"""clase para crear los proyectos, con las validaciones para id, nomre y estado"""
2+
"""Clase para modelar un proyecto"""
33

44
def __init__(self, id, nombre, estado="Activo"):
55
if not isinstance(id, int) or id <= 0:
66
raise ValueError("El ID del proyecto debe ser un entero positivo.")
77
if not nombre or not isinstance(nombre, str):
88
raise ValueError("El nombre del proyecto debe ser una cadena no vacía.")
99
if estado not in {"Activo", "Finalizado", "Pausado"}:
10-
raise ValueError(
11-
"El estado del proyecto debe ser 'Activo', 'Finalizado' o 'Pausado'."
12-
)
10+
raise ValueError("El estado del proyecto debe ser 'Activo', 'Finalizado' o 'Pausado'.")
1311

1412
self.id = id
1513
self.nombre = nombre.strip()
1614
self.estado = estado
1715

1816
def to_dict(self):
19-
"""Método para guardar los datos en JSON"""
20-
17+
"""Método para guardar los datos en JSON"""
2118
return {
2219
"id": self.id,
2320
"nombre": self.nombre,
24-
"estado": self.estado,
21+
"estado": self.estado
2522
}
2623

2724
@classmethod
2825
def from_dict(cls, data):
2926
"""Método de clase para traer un proyecto"""
30-
3127
return cls(
32-
id=data["id"],
33-
nombre=data["nombre"],
34-
estado=data.get("estado", "Activo"),
28+
id = data["id"],
29+
nombre = data["nombre"],
30+
estado = data.get("estado", "Activo")
3531
)
36-
32+
3733
def __str__(self):
3834
"""Método para imprimir los atributos de un proyecto"""
39-
4035
return f"Proyecto(id={self.id}, nombre='{self.nombre}', estado='{self.estado}')"

models/tarea.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,21 @@ def __init__(self, id, id_proyecto, descripcion):
1515

1616
def to_dict(self):
1717
"""Método para guardar los datos en JSON"""
18-
1918
return {
2019
"id": self.id,
2120
"id_proyecto": self.id_proyecto,
22-
"descripcion": self.descripcion,
21+
"descripcion": self.descripcion
2322
}
24-
23+
2524
@classmethod
2625
def from_dict(cls, data):
2726
"""Método de clase para traer una tarea"""
28-
2927
return cls(
30-
id=data["id"],
31-
id_proyecto=data["id_proyecto"],
32-
descripcion=data["descripcion"],
28+
id = data["id"],
29+
id_proyecto = data["id_proyecto"],
30+
descripcion = data["descripcion"]
3331
)
34-
32+
3533
def __str__(self):
3634
"""Método para imprimir los datos de una tarea"""
37-
3835
return f"Tarea(id={self.id}, id_proyecto={self.id_proyecto}, descripcion='{self.descripcion}')"

modules/empleados.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def menu_empleados(empleado_service):
99
Args:
1010
empleado_service (EmpleadoService): Servicio de empleado con operaciones CRUD
1111
"""
12-
12+
1313
while True:
1414
render_menu(
1515
"Gestión de Empleados",

modules/persistence.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def _crear_archivo_vacio(self):
2222

2323
def cargar_datos(self):
2424
"""Carga el archivo JSON, creando un archivo vacío si no existe"""
25-
25+
2626
if not self.filepath.exists():
2727
self._crear_archivo_vacio()
2828

modules/ui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def render_menu(title, options):
3131
3232
Args:
3333
title (str): Título del menú
34-
options (list[str]): Lista de opciones a mostrar
34+
options (list[str]): Lista de opciones a mostrar
3535
"""
3636

3737
table = Table(show_header = False, box = box.SIMPLE, pad_edge = False)

services/asignacion_service.py

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22

33

44
class 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

services/empleado_service.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22

33

44
class EmpleadoService:
5-
# Servicio para gestionar empleados
6-
5+
"""Servicio para gestionar 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, nombre, rol):
20-
# Crea un nuevo empleado
19+
"""Crea un nuevo empleado"""
20+
2121
datos = self._cargar()
2222
nuevo_id = self.manejador_persistencia.obtener_proximo_id(datos["empleados"])
2323
empleado = Empleado(nuevo_id, nombre, rol)
@@ -26,18 +26,21 @@ def crear(self, nombre, rol):
2626
return empleado
2727

2828
def obtener_todos(self):
29-
# Retorna todos los empleados
29+
"""Retorna todos los empleados"""
30+
3031
datos = self._cargar()
3132
return [Empleado.from_dict(e) for e in datos["empleados"]]
3233

3334
def obtener_por_id(self, id_empleado):
34-
# Obtiene un empleado por su ID
35+
"""Obtiene un empleado por su ID"""
36+
3537
datos = self._cargar()
3638
empleado = next((e for e in datos["empleados"] if e["id"] == id_empleado), None)
3739
return Empleado.from_dict(empleado) if empleado else None
3840

3941
def actualizar(self, id_empleado, nombre=None, rol=None):
40-
# Actualiza los datos de un empleado (nombre y/o rol)
42+
"""Actualiza los datos de un empleado (nombre y/o rol)"""
43+
4144
datos = self._cargar()
4245
empleado = next((e for e in datos["empleados"] if e["id"] == id_empleado), None)
4346
if not empleado:
@@ -57,7 +60,8 @@ def actualizar(self, id_empleado, nombre=None, rol=None):
5760
return True
5861

5962
def eliminar(self, id_empleado):
60-
# Elimina un empleado y sus asignaciones relacionadas
63+
"""Elimina un empleado y sus asignaciones relacionadas"""
64+
6165
datos = self._cargar()
6266
empleado = next((e for e in datos["empleados"] if e["id"] == id_empleado), None)
6367
if not empleado:

0 commit comments

Comments
 (0)