-
Notifications
You must be signed in to change notification settings - Fork 0
/
V1.3 Correções e tratamentos.py
407 lines (363 loc) · 21 KB
/
V1.3 Correções e tratamentos.py
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
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
import PySimpleGUI as sg
import sqlite3
from datetime import datetime
# Configuração inicial do banco de dados SQLite
def setup_db():
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS registros (
id INTEGER PRIMARY KEY AUTOINCREMENT,
qrcode_copo TEXT,
qrcode_placa TEXT,
input_time TEXT,
testador_id INTEGER,
debug_id INTEGER,
debug_time TEXT,
reparadora_id INTEGER,
repair_time TEXT,
observacao TEXT,
componentes TEXT
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS testadores (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS debuggers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT
)
''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS reparadoras (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT
)
''')
conn.commit()
conn.close()
setup_db()
# Função para obter listas de IDs e nomes
def get_list_from_db(table):
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute(f"SELECT id, nome FROM {table}")
records = cursor.fetchall()
conn.close()
return [f'{record[0]} - {record[1]}' for record in records]
# Função para obter registros do banco de dados
def get_registros():
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute("SELECT id, qrcode_copo FROM registros")
registros = cursor.fetchall()
conn.close()
return registros
# Layout da interface Menu
layout_menu = [
[sg.Text("Busca pela Etiqueta"), sg.Input(key="buscar_etiqueta"), sg.Button("Buscar")],
[sg.Button("Novo Registro")],
[sg.Text("Registros:")],
[sg.Listbox(values=[f'{registro[0]} - {registro[1]}' for registro in get_registros()], size=(100, 20), key="registros", enable_events=True)]
]
# Função para criar a janela de criação de registro
def janela_create():
layout_create = [
[sg.Text("Etiqueta Copo"), sg.Input(key="qrcode_copo")],
[sg.Text("Etiqueta Placa"), sg.Input(key="qrcode_placa")],
[sg.Input(key="Input Time", visible=False)], #adicionar o tempo somente quando apertar o botão criar
[sg.Text("Testador"), sg.Combo(get_list_from_db('testadores'), key="testador"), sg.Button("Adicionar Testador")],
[sg.Text("Debug"), sg.Combo(get_list_from_db('debuggers'), key="debug"), sg.Button("Adicionar Debug")],
[sg.Input(key="Debug Time", visible=False)], #adicionar o tempo somente quando selecionado um debug
[sg.Text("Reparadora"), sg.Combo(get_list_from_db('reparadoras'), key="reparadora"), sg.Button("Adicionar Reparadora")],
[sg.Input(key="Repair Time", visible=False)], #adicionar o tempo somente quando selecionado uma reparadora
[sg.Text("Componente"), sg.Input(size=(10),key="componente_temp"), sg.Button("Adicionar Componente"), sg.Button("Remover Componente")],
[sg.Listbox(values=[], size=(30, 5), key="lista_componentes", enable_events=True)],
[sg.Text("Observação"), sg.Input(key="observacao")],
[sg.Button("Criar")]
]
return sg.Window("Novo Registro", layout_create, finalize=True)
# Função para criar a janela de atualização de registro
def janela_update(dados):
layout_update = [
[sg.Text("Etiqueta Copo"), sg.Input(key="qrcode_copo")],
[sg.Text("Etiqueta Placa"), sg.Input(key="qrcode_placa")],
[sg.Text("Input Time"), sg.Input(key="input_time", disabled=True)],
[sg.Text("Testador"), sg.Combo(get_list_from_db('testadores'), key="testador"), sg.Button("Adicionar Testador")],
[sg.Text("Debug"), sg.Combo(get_list_from_db('debuggers'), key="debug"), sg.Button("Adicionar Debug")],
[sg.Text("Debug Time"), sg.Input(key="debug_time", disabled=True)], #adicionar o tempo somente quando selecionado um debug
[sg.Text("Reparadora"), sg.Combo(get_list_from_db('reparadoras'), key="reparadora"), sg.Button("Adicionar Reparadora")],
[sg.Text("Repair Time"), sg.Input(key="repair_time", disabled=True)], #adicionar o tempo somente quando selecionado uma reparadora
[sg.Text("Componente"), sg.Input(size=(10),key="componente_temp"), sg.Button("Adicionar Componente"), sg.Button("Remover Componente")],
[sg.Listbox(values=[], size=(40, 5), key="lista_componentes", enable_events=True)],
[sg.Text("Observação"), sg.Input(key="observacao")],
[sg.Button("Atualizar"), sg.Button("Excluir"), sg.Button("Cancelar")]
]
janela = sg.Window("Atualizar Registro", layout_update, finalize=True)
for key in dados:
if key == 'lista_componentes':
janela[key].update(values=dados[key])
else:
janela[key].update(value=dados[key])
return janela
# Função para adicionar componente à lista
def adicionar_componente(componente, lista_componentes):
if componente and componente not in lista_componentes:
lista_componentes.append(componente)
return lista_componentes
# Função para remover componente da lista
def remover_componente(componente, lista_componentes):
if componente in lista_componentes:
lista_componentes.remove(componente)
return lista_componentes
# Função principal de execução
janela = sg.Window("Menu Principal", layout_menu)
while True:
evento, valores = janela.read()
if evento == sg.WINDOW_CLOSED:
break
if evento == "Novo Registro":
janela.hide()
janela_novo_registro = janela_create()
componentes_temporarios = []
# Conexão aberta durante a execução da janela de novo registro
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
while True:
evento_novo, valores_novo = janela_novo_registro.read()
if evento_novo == sg.WINDOW_CLOSED or evento_novo == "Cancelar":
janela_novo_registro.close()
janela.un_hide()
conn.close() # Fechando a conexão aqui após terminar a janela
break
if evento_novo == "Adicionar Testador":
nome_testador = sg.popup_get_text("Nome do Testador:")
if nome_testador:
cursor.execute('INSERT INTO testadores (nome) VALUES (?)', (nome_testador,))
conn.commit()
janela_novo_registro['testador'].update(values=get_list_from_db('testadores'))
if evento_novo == "Adicionar Debug":
nome_debugger = sg.popup_get_text("Nome do Debugger:")
if nome_debugger:
cursor.execute('INSERT INTO debuggers (nome) VALUES (?)', (nome_debugger,))
conn.commit()
janela_novo_registro['debug'].update(values=get_list_from_db('debuggers'))
if evento_novo == "Adicionar Reparadora":
nome_reparadora = sg.popup_get_text("Nome da Reparadora:")
if nome_reparadora:
cursor.execute('INSERT INTO reparadoras (nome) VALUES (?)', (nome_reparadora,))
conn.commit()
janela_novo_registro['reparadora'].update(values=get_list_from_db('reparadoras'))
if evento_novo == "Adicionar Componente":
componente_temp = valores_novo['componente_temp']
# Verificação para evitar a inserção de valores vazios ou somente espaços
if not componente_temp.strip():
sg.popup("O campo de componente está vazio. Por favor, insira um valor válido.")
else:
if componente_temp:
componentes_temporarios = adicionar_componente(componente_temp, componentes_temporarios)
janela_novo_registro['lista_componentes'].update(values=componentes_temporarios)
janela_novo_registro['componente_temp'].update('')
sg.popup(f"Componente '{componente_temp}' adicionado à lista.")
if evento_novo == "Remover Componente":
componente_temp = valores_novo.get('componente_temp') # Captura o valor do campo de entrada
if componente_temp:
if componente_temp in componentes_temporarios:
componentes_temporarios = remover_componente(componente_temp, componentes_temporarios)
janela_novo_registro['lista_componentes'].update(values=componentes_temporarios)
sg.popup(f"Componente '{componente_temp}' removido da lista.")
else:
sg.popup(f"Componente '{componente_temp}' não encontrado na lista.") # Caso o componente não esteja na lista
janela_novo_registro['componente_temp'].update('') # Limpa o campo após a tentativa de remoção
else:
sg.popup("Nenhum componente foi selecionado para remoção.") # Mensagem se nenhum componente estiver selecionado
if evento_novo == "Criar":
# Validação básica de campos obrigatórios
if not valores_novo['qrcode_copo'] or not valores_novo['qrcode_placa']:
sg.popup('Preencha QRCode do Copo e QRCode da Placa campos obrigatórios.')
continue
# Validação de duplicidade das etiquetas
cursor.execute('''
SELECT COUNT(*) FROM registros
WHERE qrcode_copo = ? OR qrcode_placa = ?
''', (valores_novo['qrcode_copo'], valores_novo['qrcode_placa']))
resultado = cursor.fetchone()
if resultado[0] > 0:
sg.popup('Etiqueta Copo ou Etiqueta Placa já existente no banco de dados. Por favor, use valores únicos.')
continue
debug_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if valores_novo['debug'] else ''
repair_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if valores_novo['reparadora'] else ''
cursor.execute('''
INSERT INTO registros (
qrcode_copo,
qrcode_placa,
input_time,
testador_id,
debug_id,
debug_time,
reparadora_id,
repair_time,
observacao,
componentes
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''', (
valores_novo['qrcode_copo'],
valores_novo['qrcode_placa'],
datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
int(valores_novo['testador'].split(' ')[0]) if valores_novo['testador'] else None,
int(valores_novo['debug'].split(' ')[0]) if valores_novo['debug'] else None,
debug_time,
int(valores_novo['reparadora'].split(' ')[0]) if valores_novo['reparadora'] else None,
repair_time,
valores_novo['observacao'],
','.join(componentes_temporarios)
))
conn.commit()
sg.popup('Registro criado com sucesso!')
# Limpar os campos após criação do registro
janela_novo_registro['qrcode_copo'].update('')
janela_novo_registro['qrcode_placa'].update('')
janela_novo_registro['testador'].update('')
janela_novo_registro['debug'].update('')
janela_novo_registro['reparadora'].update('')
janela_novo_registro['componente_temp'].update('')
janela_novo_registro['observacao'].update('')
janela_novo_registro['lista_componentes'].update(values=[])
# Atualizar a listbox de registros no Menu
janela['registros'].update(values=[f'{registro[0]} - {registro[1]}' for registro in get_registros()])
if evento == "Buscar":
etiqueta = valores['buscar_etiqueta']
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM registros WHERE qrcode_copo=? OR qrcode_placa=?', (etiqueta, etiqueta))
dados = cursor.fetchone()
conn.close()
if dados is None:
sg.popup('Registro não encontrado!') # Exibe um popup se nenhum registro for encontrado
if dados:
dados_dict = {
'qrcode_copo': dados[1],
'qrcode_placa': dados[2],
'input_time': dados[3],
'testador': f"{dados[4]} - {get_list_from_db('testadores')[dados[4]-1].split(' - ')[1]}" if dados[4] else '',
'debug': f"{dados[5]} - {get_list_from_db('debuggers')[dados[5]-1].split(' - ')[1]}" if dados[5] else '',
'debug_time': dados[6],
'reparadora': f"{dados[7]} - {get_list_from_db('reparadoras')[dados[7]-1].split(' - ')[1]}" if dados[7] else '',
'repair_time': dados[8],
'observacao': dados[9]
}
# Inicializa a variável 'componentes_temporarios'
componentes_temporarios = dados[10].split(',') if dados[10] else [] # Corrigido para inicializar adequadamente
dados_dict['lista_componentes'] = componentes_temporarios
janela.hide()
janela_atualizar_registro = janela_update(dados_dict)
while True:
evento_update, valores_update = janela_atualizar_registro.read()
if evento_update == sg.WINDOW_CLOSED or evento_update == "Cancelar":
janela_atualizar_registro.close()
janela.un_hide()
break
if evento_update == "Adicionar Testador":
nome_testador = sg.popup_get_text("Nome do Testador:")
if nome_testador:
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO testadores (nome) VALUES (?)', (nome_testador,))
conn.commit()
conn.close()
janela_atualizar_registro['testador'].update(values=get_list_from_db('testadores'))
if evento_update == "Adicionar Debug":
nome_debugger = sg.popup_get_text("Nome do Debugger:")
if nome_debugger:
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO debuggers (nome) VALUES (?)', (nome_debugger,))
conn.commit()
conn.close()
janela_atualizar_registro['debug'].update(values=get_list_from_db('debuggers'))
if evento_update == "Adicionar Reparadora":
nome_reparadora = sg.popup_get_text("Nome da Reparadora:")
if nome_reparadora:
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO reparadoras (nome) VALUES (?)', (nome_reparadora,))
conn.commit()
conn.close()
janela_atualizar_registro['reparadora'].update(values=get_list_from_db('reparadoras'))
if evento_update == "Adicionar Componente":
componente_temp = valores_update['componente_temp']
if not componente_temp.strip(): # strip() remove espaços em branco no início e no fim
sg.popup("O campo de componente está vazio. Por favor, insira um valor válido.")
if componente_temp:
componentes_temporarios = adicionar_componente(componente_temp, componentes_temporarios)
janela_atualizar_registro['lista_componentes'].update(values=componentes_temporarios)
janela_atualizar_registro['componente_temp'].update('')
sg.popup(f"Componente '{componente_temp}' adicionado da lista.")
if evento_update == "Remover Componente":
componente_temp = valores_update.get('componente_temp') # Captura o valor do campo de entrada
if componente_temp:
if componente_temp in componentes_temporarios:
componentes_temporarios = remover_componente(componente_temp, componentes_temporarios)
janela_atualizar_registro['lista_componentes'].update(values=componentes_temporarios)
sg.popup(f"Componente '{componente_temp}' removido da lista.")
else:
sg.popup(f"Componente '{componente_temp}' não encontrado na lista.") # Caso o componente não esteja na lista
janela_atualizar_registro['componente_temp'].update('') # Limpa o campo após a tentativa de remoção
else:
sg.popup("Nenhum componente foi selecionado para remoção.") # Mensagem se nenhum componente estiver selecionado
if evento_update == "Atualizar":
debug_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if valores_update['debug'] else ''
repair_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if valores_update['reparadora'] else ''
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute('''
UPDATE registros SET
qrcode_copo = ?,
qrcode_placa = ?,
testador_id = ?,
debug_id = ?,
debug_time = ?,
reparadora_id = ?,
repair_time = ?,
observacao = ?,
componentes = ?
WHERE id = ?
''', (
valores_update['qrcode_copo'],
valores_update['qrcode_placa'],
int(valores_update['testador'].split(' ')[0]) if valores_update['testador'] else None,
int(valores_update['debug'].split(' ')[0]) if valores_update['debug'] else None,
debug_time,
int(valores_update['reparadora'].split(' ')[0]) if valores_update['reparadora'] else None,
repair_time,
valores_update['observacao'],
','.join(componentes_temporarios),
dados[0]
))
conn.commit()
conn.close()
sg.popup('Registro atualizado com sucesso!')
janela_atualizar_registro.close()
janela.un_hide()
# Atualizar a listbox de registros no Menu
janela['registros'].update(values=[f'{registro[0]} - {registro[1]}' for registro in get_registros()])
break
if evento_update == "Excluir":
confirmar_exclusao = sg.popup_yes_no('Deseja realmente excluir este registro?', title='Confirmação de Exclusão')
if confirmar_exclusao == 'Yes':
conn = sqlite3.connect('registros.db')
cursor = conn.cursor()
cursor.execute('DELETE FROM registros WHERE id=?', (dados[0],))
conn.commit()
conn.close()
sg.popup('Registro excluído com sucesso!')
janela_atualizar_registro.close()
janela.un_hide()
# Atualizar a listbox de registros no Menu
janela['registros'].update(values=[f'{registro[0]} - {registro[1]}' for registro in get_registros()])
break
janela.close()