-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmenus.py
More file actions
389 lines (289 loc) · 15.6 KB
/
menus.py
File metadata and controls
389 lines (289 loc) · 15.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
import textwrap
from models.usuarios import Usuario
from models.rol import Rol
from models.especialidad import Especialidad
from models.paciente import Paciente
from models.estado_paciente import Estado_paciente
from models.sexo import Sexo
from models.cita_medica import Cita_medica
from models.estado_cita import Estado_cita
# Menú del Administrador
def menu_admin(usuario):
while True:
print("\n" + "=" * 40)
print(f"PANEL ADMINISTRADOR | Usuario: {usuario['nombre']} {usuario['apellido']}")
print("="*40)
print("1. Gestionar Usuarios")
print("2. Gestionar Pacientes")
print("3. Gestionar Citas Médicas")
op = input("Ingrese una opción: ")
if op == "1":
u = Usuario()
r = Rol()
e = Especialidad()
print("\n[!] Entrando al módulo de Gestión de Usuarios...")
print("\n Ingrese una de las siguientes opciones: ")
print("1. Agregar Usuario")
print("2. Modificar Usuario")
print("3. Deshabilitar Usuario")
print("4. Consultar Usuarios")
print("5. Agregar Especialidad a Médico")
op_usuario = input("---> ")
if op_usuario == "1":
try:
u.rut = input("Ingresa el RUT del usuario: ")
u.nombre = input("Ingresa el nombre del usuario: ")
u.apellido = input("Ingresa el apellido del usuario: ")
u.password = input("Ingresa la contraseña del usuario: ")
roles = r.leer_roles()
for rol in roles:
print(f"ID: {rol[0]} | Nombre: {rol[1]}")
u.rol_id = int(input("Ingresa el rol del usuario: "))
if u.agregar_usuario():
print("Usuario agregado exitosamente.")
except ValueError:
print("En el Rol solo se admiten valores númericos. Intentelo nuevamente")
elif op_usuario == "2":
usuarios = u.leer_usuarios()
for usr in usuarios:
print(f"ID: {usr[0]} | RUT: {usr[1]} | Nombre: {usr[2]} | Apellido: {usr[3]} | Rol: {usr[4]} | Estado: {usr[5]}")
rut = input("Ingresa el RUT del usuario que deseas modificar: ")
u.obtener_por_rut(rut)
if u.id:
# Todo input que se deje vacío se deja el valor que estaba almacenado en la Base de Datos.
print(f"\nEditando Usuario {u.nombre} {u.apellido}")
print("Presione 'Enter' para manter el valor actual.")
nuevo_nombre = input(f"Nombre actual {u.nombre}: ")
if nuevo_nombre.strip():
u.nombre = nuevo_nombre
nuevo_apellido = input(f"Apellido actual {u.apellido}: ")
if nuevo_apellido.strip():
u.apellido = nuevo_apellido
roles = r.leer_roles()
for rol in roles:
print(f"ID: {rol[0]} | Nombre: {rol[1]}")
nuevo_rol = input(f"Rol actual: {u.rol_id}: ")
if nuevo_rol.strip():
u.rol_id = int(nuevo_rol)
nueva_pass = input("Nueva contraseña (Dejar vacía para mantener): ")
u.modificar_usuario(u.id, nueva_pass)
else:
print("Usuario no encontrado.")
elif op_usuario == "3":
usuarios = u.leer_usuarios()
for usr in usuarios:
print(f"ID: {usr[0]} | RUT: {usr[1]} | Nombre: {usr[2]} | Apellido: {usr[3]} | Rol: {usr[4]} | Estado: {usr[5]}")
try:
id = int(input("Ingresa el ID del usuario que deseas deshabilitar: "))
u.deshabilitar_usuario(id)
except ValueError:
print("Solo se aceptan números, no letras. Vuelva a intentarlo")
finally:
print()
elif op_usuario == "4":
usuarios = u.leer_usuarios()
for usr in usuarios:
print(f"ID: {usr[0]} | RUT: {usr[1]} | Nombre: {usr[2]} | Apellido: {usr[3]} | Rol: {usr[4]} | Estado: {usr[5]}")
elif op_usuario == "5":
medicos = u.leer_medicos()
for medico in medicos:
print(f"ID: {medico[0]} | RUT: {medico[1]} | Nombre: {medico[2]} | Apellido: {medico[3]} | Rol: {medico[4]} | Estado: {medico[5]}")
try:
id_medico = int(input("Ingrese el ID del médico: "))
especialidades = e.leer_especialidades()
for especialidad in especialidades:
print(f"ID: {especialidad[0]} | Nombre: {especialidad[1]}")
id_especialidad = int(input("Ingrese el ID de la especialidad: "))
u.agregar_especialidad(id_medico, id_especialidad)
except ValueError:
print("Solo se aceptan números, no letras. Vuelva a intentarlo")
finally:
print()
elif op == "2":
p = Paciente()
e_p = Estado_paciente()
s = Sexo()
print("\n[!] Entrando al módulo de Gestión de Pacientes...")
print("\n Ingrese una de las siguientes opciones: ")
print("1. Agregar Paciente")
print("2. Modificar Paciente")
print("3. Cambiar Estado Paciente")
print("4. Consultar Pacientes")
op_paciente = input("---> ")
if op_paciente == "1":
try:
p.rut = input("Ingrese el RUT del paciente: ")
p.nombres = input("Ingrese los nombres del paciente: ")
p.apellidos = input("Ingrese los apellidos del paciente: ")
p.direccion = input("Ingrese la dirección del paciente: ")
p.telefono = input("Ingrese el número de teléfono del paciente: ")
fecha_nacimiento = input("Ingrese la fecha de nacimiento del paciente (Ej: 1998-04-15): ")
sexos = s.leer_sexos()
print()
for sexo in sexos:
print(f"ID: {sexo[0]} | Nombre: {sexo[1]}")
p.sexo_id = int(input("Ingrese el ID del sexo del paciente: "))
if p.agregar_paciente(fecha_nacimiento):
print("Paciente agregado exitosamente.")
except ValueError:
print("Error el Sexo solo recibe valores númericos. Intentelo nuevamente")
finally:
print()
elif op_paciente == "2":
pacientes = p.leer_pacientes()
for paciente in pacientes:
print(textwrap.dedent(f"""
ID: {paciente[0]}
RUT: {paciente[1]}
Nombres: {paciente[2]}
Apellidos: {paciente[3]}
Dirección: {paciente[4]}
Teléfono: {paciente[5]}
Fecha Nacimiento: {paciente[6]}
Sexo: {paciente[7]}
Estado: {paciente[8]}
"""))
rut = input("Ingrese el RUT del paciente: ")
p.obtener_por_rut(rut)
if p.id:
print(f"\nEditando Usuario {p.nombres} {p.apellidos}")
print("Presione 'Enter' para manter el valor actual.")
nuevos_nombres = input(f"Nombres actuales {p.nombres}: ")
if nuevos_nombres.strip():
p.nombres = nuevos_nombres
nuevos_apellidos = input(f"Apellidos actuales {p.apellidos}: ")
if nuevos_apellidos.strip():
p.apellidos = nuevos_apellidos
nueva_direccion = input(f"Diracción actual {p.direccion}: ")
if nueva_direccion.strip():
p.direccion = nueva_direccion
nuevo_num = input(f"Teléfono actual {p.telefono}: ")
if nuevo_num.strip():
p.telefono = nuevo_num
p.modificar_paciente(p.id)
print("Paciente modificado exitosamente")
else:
print("Paciente no encontrado.")
elif op_paciente == "3":
try:
estados = e_p.leer_estados()
pacientes = p.leer_pacientes()
for paciente in pacientes:
print(textwrap.dedent(f"""
ID: {paciente[0]}
RUT: {paciente[1]}
Nombres: {paciente[2]}
Apellidos: {paciente[3]}
Dirección: {paciente[4]}
Teléfono: {paciente[5]}
Fecha Nacimiento: {paciente[6]}
Sexo: {paciente[7]}
Estado: {paciente[8]}
"""))
id_paciente = int(input("Ingrese el ID del paciente al que desea cambiar el estado: "))
for estado in estados:
print(f"ID: {estado[0]} | Nombre: {estado[1]}")
id_estado = int(input("Ingrese el ID del estado: "))
p.actualizar_estado_paciente(id_estado, id_paciente)
print("Se cambio el estado exitosamente")
except ValueError:
print("Error el ID del paciente y del estado solo aceptan valores númericos. Intente nuevamente")
finally:
print()
elif op_paciente == "4":
pacientes = p.leer_pacientes()
for paciente in pacientes:
print(textwrap.dedent(f"""
ID: {paciente[0]}
RUT: {paciente[1]}
Nombres: {paciente[2]}
Apellidos: {paciente[3]}
Dirección: {paciente[4]}
Teléfono: {paciente[5]}
Fecha Nacimiento: {paciente[6]}
Sexo: {paciente[7]}
Estado: {paciente[8]}
"""))
elif op == "3":
u = Usuario()
p = Paciente()
c = Cita_medica()
e_c = Estado_cita()
print("\n[!] Entrando al módulo de Gestión de Citas Médicas...")
print("\n Ingrese una de las siguientes opciones: ")
print("1. Agregar Cita")
print("2. Reprogramar Cita")
print("3. Cambiar Estado Cita")
print("4. Consultar Citas")
op_cita = input("---> ")
if op_cita == "1":
medicos = u.leer_medicos()
pacientes = p.leer_pacientes()
for medico in medicos:
print(f"ID: {medico[0]} RUT: {medico[1]} | Nombre: {medico[2]} {medico[3]} | Rol: {medico[4]} | Estado: {medico[5]}")
try:
id_medico = int(input("Ingrese el ID del médico: "))
for paciente in pacientes:
print(textwrap.dedent(f"""
ID: {paciente[0]}
RUT: {paciente[1]}
Nombres: {paciente[2]}
Apellidos: {paciente[3]}
Dirección: {paciente[4]}
Teléfono: {paciente[5]}
Fecha Nacimiento: {paciente[6]}
Sexo: {paciente[7]}
Estado: {paciente[8]}
"""))
id_paciente = int(input("Ingrese el ID del paciente: "))
fecha_hora = input("Ingrese la fecha y hora de la cita médica (Ej: 2026-01-20 08:30): ")
c.agregar_cita(id_medico, id_paciente, fecha_hora)
print("Cita agregada exitosamente")
except ValueError:
print("Los campos ID médico y ID paciente solo aceptan valores númericos. Intentelo nuevamente")
finally:
print()
elif op_cita == "2":
fecha = input("Ingrese la fecha de la cita que desea buscar (Ej: 2026-01-02): ")
citas = c.leer_por_fecha(fecha)
for cita in citas:
print(f"ID: {cita[0]} | Médico: {cita[1]} | Paciente: {cita[2]} | Fecha y Hora: {cita[3]} | Estado: {cita[4]}")
id_cita = int(input("Ingrese el ID de la cita que desea reprogramar: "))
nueva_fecha = input("Ingrese la nueva fecha y hora de la cita (Ej: 2026-01-27): ")
c.reprogramar_cita(id_cita, nueva_fecha)
print("Se ha reprogramado la cita exitosamente")
elif op_cita == "3":
fecha = input("Ingrese la fecha y hora de la cita médica (Ej: 2026-01-20 08:30): ")
citas = c.leer_por_fecha(fecha)
estados = e_c.leer_estados()
for cita in citas:
print(f"ID: {cita[0]} | Médico: {cita[1]} | Paciente: {cita[2]} | Fecha y Hora: {cita[3]} | Estado: {cita[4]}")
id_cita = int(input("Ingrese el ID de la cita: "))
for estado in estados:
if estado[0] != 1:
print(f"ID: {estado[0]} | Nombre: {estado[1]}")
id_estado = int(input("Ingrese el ID del estado al que debe cambiar la cita: "))
c.cambiar_estado_cita(id_cita, id_estado)
print("Estado cambiado exitosamente")
elif op_cita == "4":
print("Escoja una de las siguientes opciones: ")
print("1. Buscar citas por fecha")
print("2. Buscar citas por médico")
opp = input("---> ")
if opp == "1":
fecha_esc = input("Ingrese la fecha y hora de la cita médica (Ej: 2026-01-20 08:30): ")
citas_fecha = c.leer_por_fecha(fecha_esc)
print("\n")
for cita in citas_fecha:
print(f"ID: {cita[0]} | Médico: {cita[1]} | Paciente: {cita[2]} | Fecha y Hora: {cita[3]} | Estado: {cita[4]}")
elif opp == "2":
medicos = u.leer_medicos()
for medico in medicos:
print(f"ID: {medico[0]} RUT: {medico[1]} | Nombre: {medico[2]} {medico[3]} | Rol: {medico[4]} | Estado: {medico[5]}")
medico_id = int(input("Ingrese el ID del médico: "))
citas_medico = c.leer_por_medico(medico_id)
print("\n")
for cita in citas_medico:
print(f"ID: {cita[0]} | Médico: {cita[1]} | Paciente: {cita[2]} | Fecha y Hora: {cita[3]} | Estado: {cita[4]}")
else:
print("Ingrese una opción válida.")