Mundo em Python

Registar Medicamentos Farmácia

from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
import sqlite3
from datetime import datetime
def Database():
global conn, cursor
conn = sqlite3.connect("inventario_medicamentos.db")
cursor = conn.cursor()
cursor.execute(
"CREATE TABLE IF NOT EXISTS REGISTRATION (RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, NOMEMEDICAMENTO TEXT, DATA_REGISTO TEXT, VALIDADE TEXT, ESTADO TEXT)"
)
def isValidDate(date_str):
try:
datetime.strptime(date_str, '%Y-%m-%d')
return True
except ValueError:
return False


def DisplayForm():
root = Tk()
root.geometry("900x500")
root.title("Registrar Medicamentos Farmácia")
global tree
global SEARCH
global nome_medicamentos, data_registro, validade, estado
SEARCH = StringVar()
nome_medicamentos = StringVar()
data_registro = StringVar()
validade = StringVar()
estado = StringVar() TopViewForm = Frame(root, width=600, bd=1, relief=SOLID)
TopViewForm.pack(side=TOP, fill=X)
LFrom = Frame(root, width="350", bg="#15244C")
LFrom.pack(side=LEFT, fill=Y)
LeftViewForm = Frame(root, width=500, bg="#0B4670")
LeftViewForm.pack(side=LEFT, fill=Y)
MidViewForm = Frame(root, width=600)
MidViewForm.pack(side=RIGHT) lbl_text = Label(TopViewForm, text="Registar Medicamentos Farmácia", font=('verdana', 18), width=600, bg="cyan")
lbl_text.pack(fill=X) Label(LFrom, text="Nome do Medicamento ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=nome_medicamentos).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Data de Registo (AAAA-MM-DD) ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=data_registro, state='readonly').pack(side=TOP, padx=10,
fill=X)
data_registro.set(datetime.now().date().strftime('%Y-%m-%d')) Label(LFrom, text="Data de Validade (AAAA-MM-DD) ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=validade).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Estado ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
estado.set("Selecionar Estado")
content = {'Fora do Prazo', 'Dentro do Prazo'}
OptionMenu(LFrom, estado, *content).pack(side=TOP, padx=10, fill=X) Button(LFrom, text="Submeter", font=("Arial", 10, "bold"), bg="#15244C", fg="white", command=register).pack(
side=TOP, padx=10, pady=5, fill=X) lbl_txtsearch = Label(LeftViewForm, text="Digite o Nome", font=('verdana', 10), bg="#0B4670")
lbl_txtsearch.pack()
search = Entry(LeftViewForm, textvariable=SEARCH, font=('verdana', 15), width=10)
search.pack(side=TOP, padx=10, fill=X)
btn_search = Button(LeftViewForm, text="Pesquisa", bg="cyan", command=SearchRecord)
btn_search.pack(side=TOP, padx=10, pady=10, fill=X)
btn_view = Button(LeftViewForm, text="Ver tudo", bg="cyan", command=DisplayData)
btn_view.pack(side=TOP, padx=10, pady=10, fill=X)
btn_Limpar = Button(LeftViewForm, text="Limpar", bg="cyan", command=limpar)
btn_Limpar.pack(side=TOP, padx=10, pady=10, fill=X)
btn_apagar = Button(LeftViewForm, text="Apagar", bg="cyan", command=apagar)
btn_apagar.pack(side=TOP, padx=10, pady=10, fill=X)
btn_actualizar = Button(LeftViewForm, text="Actualizar", bg="cyan", command=actualizacao)
btn_actualizar.pack(side=TOP, padx=10, pady=10, fill=X) scrollbarx = Scrollbar(MidViewForm, orient=HORIZONTAL)
scrollbary = Scrollbar(MidViewForm, orient=VERTICAL) tree = ttk.Treeview(MidViewForm, columns=("RID", "Nome_Medicamentos", "Data_Registo", "Validade", "Estado"),
selectmode="extended", height=100, yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set)
scrollbary.config(command=tree.yview)
scrollbary.pack(side=RIGHT, fill=Y)
scrollbarx.config(command=tree.xview)
scrollbarx.pack(side=BOTTOM, fill=X) tree.heading('RID', text="ID", anchor=W)
tree.heading('Nome_Medicamentos', text="Nome Medicamento", anchor=W)
tree.heading('Data_Registo', text="Data de Registo", anchor=W)
tree.heading('Validade', text="Validade", anchor=W)
tree.heading('Estado', text="Estado", anchor=W)
tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=100)
tree.column('#2', stretch=NO, minwidth=0, width=150)
tree.column('#3', stretch=NO, minwidth=0, width=150)
tree.column('#4', stretch=NO, minwidth=0, width=100) tree.pack()
DisplayData()
def register():
Database()
nome = nome_medicamentos.get()
data_reg = data_registro.get()
val = validade.get()
est = estado.get() if nome == '' or data_reg == '' or val == '' or est == '':
tkMessageBox.showinfo("Atenção", "Preencha todos os campos!!!")
else:
# Validar o formato da data de registro e de validade
if not isValidDate(data_reg) or not isValidDate(val):
tkMessageBox.showinfo("Atenção", "Formato de data inválido. Use AAAA-MM-DD.")
return

# Verificar se a data de validade está no passado para mudar o estado
if datetime.strptime(val, '%Y-%m-%d').date() < datetime.now().date():
est = 'Fora do Prazo'
else:
est = 'Dentro do Prazo'

conn.execute('INSERT INTO REGISTRATION (NOMEMEDICAMENTO, DATA_REGISTO, VALIDADE, ESTADO) VALUES (?, ?, ?, ?)',
(nome, data_reg, val, est))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Medicamento adicionado com sucesso")
DisplayData()
conn.close()
def SearchRecord():
Database()
if SEARCH.get() != "":
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION WHERE NOMEMEDICAMENTO LIKE ?",
('%' + str(SEARCH.get()) + '%',))
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
def actualizacao():
Database()
nome = nome_medicamentos.get()
data_reg = data_registro.get()
val = validade.get()
est = estado.get()
if nome == '' or data_reg == '' or val == '' or est == '':
tkMessageBox.showinfo("Atenção", "Preencha todos os campos!!!")
else:
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
conn.execute('UPDATE REGISTRATION SET NOMEMEDICAMENTO=?, DATA_REGISTO=?, VALIDADE=?, ESTADO=? WHERE RID=?',
(nome, data_reg, val, est, selecteditem[0]))
conn.commit()
tkMessageBox.showinfo("Message", "Atualizado com sucesso")
limpar()
DisplayData()
conn.close()
def apagar():
Database()
if not tree.selection():
tkMessageBox.showwarning("Atenção", "Selecione o medicamento a eliminar")
else:
result = tkMessageBox.askquestion('Confirmar', 'Deseja apagar o registro do medicamento?', icon="warning")
if result == 'yes':
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
conn.execute("DELETE FROM REGISTRATION WHERE RID = ?", (selecteditem[0],))
conn.commit()
conn.close()
def limpar():
tree.delete(*tree.get_children())
DisplayData()
SEARCH.set("")
nome_medicamentos.set("")
data_registro.set(datetime.now().date().strftime('%Y-%m-%d'))
validade.set("")
estado.set("Selecionar Estado")
def DisplayData():
Database()
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
def OnDoubleClick(event):
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
nome_medicamentos.set(selecteditem[1])
data_registro.set(selecteditem[2])
validade.set(selecteditem[3])
estado.set(selecteditem[4])
DisplayForm()
if __name__ == '__main__':
mainloop()
0