-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconsulta.py
More file actions
165 lines (150 loc) · 7.29 KB
/
consulta.py
File metadata and controls
165 lines (150 loc) · 7.29 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
import oracledb
import json
from utilitarios import getConnection, validar_string, validar_inteiro, validar_data, validar_id, validar_sim_nao
def create_consulta(id, especialidade, data_consulta, ativa, id_paciente):
"""Agenda uma nova consulta e retorna True em caso de sucesso."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = """
INSERT INTO cc_consultas (id, especialidade, data_consulta, ativa, id_paciente)
VALUES (:id, :especialidade, :data_consulta, :ativa, :id_paciente)
"""
cursor.execute(sql, {
'id': id, 'especialidade': especialidade, 'data_consulta': data_consulta,
'ativa': ativa, 'id_paciente': id_paciente
})
conn.commit()
return True
except oracledb.Error as e:
print(f'\n Erro ao agendar consulta: {e}')
return False
def read_consulta():
"""Lê e retorna uma lista de todas as consultas."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = "SELECT id, especialidade, data_consulta, ativa, id_paciente FROM cc_consultas ORDER BY data_consulta DESC"
cursor.execute(sql)
consultas = []
for row in cursor.fetchall():
consultas.append({
'id': row[0], 'especialidade': row[1], 'data_consulta': row[2],
'ativa': row[3], 'id_paciente': row[4]
})
return consultas
except oracledb.Error as e:
print(f'\n Erro ao ler consultas: {e}')
return None
def update_consulta(id, nova_especialidade, nova_data_consulta, nova_ativa, novo_id_paciente):
"""Atualiza uma consulta e retorna True em caso de sucesso."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = """
UPDATE cc_consultas
SET especialidade = :nova_especialidade, data_consulta = :nova_data_consulta,
ativa = :nova_ativa, id_paciente = :novo_id_paciente
WHERE id = :id
"""
cursor.execute(sql, {
'nova_especialidade': nova_especialidade, 'nova_data_consulta': nova_data_consulta,
'nova_ativa': nova_ativa, 'novo_id_paciente': novo_id_paciente, 'id': id
})
conn.commit()
return cursor.rowcount > 0
except oracledb.Error as e:
print(f'\n Erro ao atualizar consulta: {e}')
return False
def delete_consulta(id):
"""Exclui uma consulta e retorna True em caso de sucesso."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = "DELETE FROM cc_consultas WHERE id = :id"
cursor.execute(sql, {'id': id})
conn.commit()
return cursor.rowcount > 0
except oracledb.Error as e:
print(f'\n Erro ao excluir consulta: {e}')
return False
def exportar_consultas_json():
"""Exporta as consultas para JSON e retorna True em caso de sucesso."""
print('\n Exportando dados das consultas para JSON...')
consultas = read_consulta()
if consultas is None:
print(' Não foi possível obter os dados para exportar.')
return False
if not consultas:
print(" Nenhuma consulta encontrada para exportar.")
return True
try:
with open('consultas.json', 'w', encoding='utf-8') as f:
json.dump(consultas, f, ensure_ascii=False, indent=4, default=str)
print(' Dados exportados com sucesso para consultas.json.')
return True
except IOError as e:
print(f' Erro ao escrever o arquivo JSON: {e}')
return False
def main_consulta():
while True:
print('\n**Menu - Consulta**')
print('1. Agendar uma nova Consulta')
print('2. Listar todas as Consultas')
print('3. Atualizar os dados de uma Consulta')
print('4. Excluir uma Consulta')
print('5. Exportar Consultas para Json')
print('6. Voltar ao menu principal')
opcao = validar_inteiro('Digite uma opção entre 1 e 6: ')
if opcao == 1:
print('\n*** Agendando uma nova consulta ***')
id = validar_id()
especialidade = validar_string('Digite a especialidade da consulta: ')
data_consulta = validar_data('Digite a data da consulta (DD/MM/AAAA HH:MM): ')
ativa = validar_sim_nao("Digite o status da consulta (s para ativa, n para inativa): ")
id_paciente = validar_string('Digite o ID do Paciente: ')
if create_consulta(id, especialidade, data_consulta, ativa, id_paciente):
print(f'\n Consulta {id} de especialidade {especialidade} foi agendada com sucesso!')
else:
print('\n Falha ao agendar a consulta.')
elif opcao == 2:
print('\n*** Listando todas as consultas ***')
consultas = read_consulta()
if consultas is not None:
if consultas:
print("\n--- Lista de Consultas ---")
for c in consultas:
data_formatada = c['data_consulta'].strftime('%d/%m/%Y %H:%M') if c['data_consulta'] else ''
print(f"ID: {c['id']}, Especialidade: {c['especialidade']}, Data: {data_formatada}, Ativa: {c['ativa']}, ID Paciente: {c['id_paciente']}")
print('----------------------------------')
else:
print(" Nenhuma consulta encontrada.")
else:
print(" Erro ao listar as consultas.")
elif opcao == 3:
print('\n*** Atualizando uma consulta ***')
id = validar_string('Digite o Id da Consulta que deseja atualizar: ')
nova_especialidade = validar_string('Digite a nova especialidade: ')
nova_data_consulta = validar_data('Digite a nova data (DD/MM/AAAA HH:MM): ')
nova_ativa = validar_sim_nao("Digite o status da consulta (s para ativa, n para inativa): ")
novo_id_paciente = validar_string('Digite o novo Id do Paciente: ')
if update_consulta(id, nova_especialidade, nova_data_consulta, nova_ativa, novo_id_paciente):
print(f'\n Os dados da consulta {id} foram atualizados com sucesso!')
else:
print(f'\n Falha ao atualizar. Nenhuma consulta com ID {id} foi encontrada ou ocorreu um erro.')
elif opcao == 4:
print('\n*** Excluindo uma consulta ***')
id = validar_string('Digite o Id da Consulta que deseja excluir: ')
if delete_consulta(id):
print(f'\n A consulta {id} foi excluída com sucesso!')
else:
print(f'\n Falha ao excluir. Nenhuma consulta com ID {id} foi encontrada ou ocorreu um erro.')
elif opcao == 5:
exportar_consultas_json()
elif opcao == 6:
print('\nRetornando ao menu principal...')
break
else:
print("\n Opção inválida. Tente novamente com um número inteiro entre 1 e 6.")
if __name__ == "__main__":
main_consulta()