-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprogressos.py
More file actions
153 lines (137 loc) · 6.95 KB
/
progressos.py
File metadata and controls
153 lines (137 loc) · 6.95 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
import oracledb
import json
from utilitarios import getConnection, validar_string, validar_id, validar_data, validar_inteiro
def create_progresso(id_progresso, id_usuario, id_modulo, data_conclusao):
"""Insere um novo progresso no banco e retorna True em caso de sucesso."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = """
INSERT INTO LM_PROGRESSOS (id_progresso, id_usuario, id_modulo, data_conclusao)
VALUES (:id_progresso, :id_usuario, :id_modulo, :data_conclusao)
"""
cursor.execute(sql, {'id_progresso': id_progresso, 'id_usuario': id_usuario, 'id_modulo': id_modulo, 'data_conclusao': data_conclusao})
conn.commit()
return True
except oracledb.Error as e:
print(f'\n Erro ao inserir Progresso: {e}')
return False
def read_progresso():
"""Lê e retorna uma lista de todos os progressos do banco."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = "SELECT id_progresso, id_usuario, id_modulo, data_conclusao FROM LM_PROGRESSOS ORDER BY data_conclusao"
cursor.execute(sql)
progressos = []
for row in cursor.fetchall():
progressos.append({'id_progresso': row[0], 'id_usuario': row[1], 'id_modulo': row[2], 'data_conclusao': row[3]})
return progressos
except oracledb.Error as e:
print(f'\n Erro ao ler Progressos: {e}')
return None
def update_progresso(id_progresso, novo_id_usuario, novo_id_modulo, nova_data_conclusao):
"""Atualiza um progresso e retorna True se a atualização for bem-sucedida."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = """
UPDATE LM_PROGRESSOS
SET id_usuario = :novo_id_usuario, id_modulo = :novo_id_modulo, data_conclusao = :nova_data_conclusao
WHERE id_progresso = :id_progresso
"""
cursor.execute(sql, {'novo_id_usuario': novo_id_usuario, 'novo_id_modulo': novo_id_modulo, 'nova_data_conclusao': nova_data_conclusao, 'id_progresso': id_progresso})
conn.commit()
return cursor.rowcount > 0
except oracledb.Error as e:
print(f'\n Erro ao atualizar Progresso: {e}')
return False
def delete_progresso(id_progresso):
"""Exclui um progresso e retorna True se a exclusão for bem-sucedida."""
try:
with getConnection() as conn:
with conn.cursor() as cursor:
sql = "DELETE FROM LM_PROGRESSOS WHERE id_progresso = :id_progresso"
cursor.execute(sql, {'id_progresso': id_progresso})
conn.commit()
return cursor.rowcount > 0
except oracledb.Error as e:
print(f'\n Erro ao excluir Progresso: {e}')
return False
def exportar_progressos_json():
"""Exporta os progressos para um arquivo JSON e retorna True em caso de sucesso."""
print('\n Exportando dados dos progressos para JSON...')
progressos = read_progresso()
if progressos is None:
print(' Não foi possível obter os dados para exportar.')
return False
if not progressos:
print(" Nenhum progresso cadastrado para exportar.")
return True
try:
with open('progressos.json', 'w', encoding='utf-8') as f:
json.dump(progressos, f, ensure_ascii=False, indent=4)
print(' Dados exportados com sucesso para progressos.json.')
return True
except IOError as e:
print(f' Erro ao escrever o arquivo JSON: {e}')
return False
def main_progresso():
while True:
print('\n**Menu - Progresso**')
print('1. Inserir um novo Progresso')
print('2. Listar todos os Progressos')
print('3. Atualizar os dados de um Progresso')
print('4. Excluir um Progresso')
print('5. Exportar Progressos para Json')
print('6. Voltar ao menu principal')
opcao = validar_inteiro('Digite uma opção entre 1 e 6: ')
if opcao == 1:
print('\n*** Inserindo um novo progresso ***')
id_progresso = validar_id()
id_usuario = validar_string('Digite o id_usuario do progresso: ')
id_modulo = validar_string('Digite o id_modulo do progresso: ')
data_conclusao = validar_data('Digite a data de conclusão do progresso (DD/MM/AAAA HH:MM): ')
if create_progresso(id_progresso, id_usuario, id_modulo, data_conclusao):
print(f'\n Progresso (ID: {id_progresso}) foi adicionado com sucesso!')
else:
print('\n Falha ao adicionar o progresso.')
elif opcao == 2:
print('\n*** Listando todos os Progressos ***')
progressos = read_progresso()
if progressos is not None:
if progressos:
print("\n--- Lista de Progressos ---")
for p in progressos:
print(f"ID: {p['id_progresso']}, ID Usuario: {p['id_usuario']}, ID Modulo: {p['id_modulo']}, Data de Conclusao: {p['data_conclusao']}")
print('----------------------------------')
else:
print(" Nenhum progresso encontrado.")
else:
print(" Erro ao listar os progressos.")
elif opcao == 3:
print('\n*** Atualizando um Progresso ***')
id_progresso = validar_string('Digite o Id do Progresso que deseja atualizar: ')
novo_id_usuario = validar_string('Digite o novo id_usuario do Progresso: ')
novo_id_modulo = validar_string('Digite o novo id_modulo do Progresso: ')
nova_data_conclusao = validar_data('Digite a nova data de conclusão do Progresso (DD/MM/AAAA HH:MM): ')
if update_progresso(id_progresso, novo_id_usuario, novo_id_modulo, nova_data_conclusao):
print(f'\n Os dados do Progresso {id_progresso} foram atualizados com sucesso!')
else:
print(f'\n Falha ao atualizar. Nenhum Progresso com ID {id_progresso} foi encontrado ou ocorreu um erro.')
elif opcao == 4:
print('\n*** Excluindo um Progresso ***')
id_progresso = validar_string('Digite o Id do Progresso que deseja excluir: ')
if delete_progresso(id_progresso):
print(f'\n O Progresso {id_progresso} foi excluído com sucesso!')
else:
print(f'\n Falha ao excluir. Nenhum Progresso com ID {id_progresso} foi encontrado ou ocorreu um erro.')
elif opcao == 5:
exportar_progressos_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_progresso()