import sqlite3
from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
from datetime import date
def Database():
global conn, cursor
conn = sqlite3.connect("peças_pedido.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS REGISTRATION (RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
" NOMEPECA TEXT, DATA TEXT, QUANTIDADE REAL, PRECO FLOAT, ESTADO TEXT, CUSTOTOTAL FLOAT)")
conn.commit()
def DisplayForm():
global tree, SEARCH, SEARCH2, Nomedapeça, data, quantidade, estado, preço
root = Tk()
root.geometry("900x600")
root.title("Pedido de Peças")
SEARCH = StringVar()
SEARCH2 = StringVar()
Nomedapeça = StringVar()
preço = DoubleVar()
data = StringVar(value=date.today().strftime("%Y-%m-%d"))
quantidade = DoubleVar()
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="Pedido de Peças", font=('verdana', 18), width=600, bg="cyan")
lbl_text.pack(fill=X)
Label(LFrom, text="Nome da Peça ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=Nomedapeça).pack(side=TOP, padx=10, fill=X)
Label(LFrom, text="Data ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=data).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 da Peça")
content1 = {'Pedido', 'Em espera', 'Recebido'}
OptionMenu(LFrom, estado, *content1).pack(side=TOP, padx=10, fill=X)
Label(LFrom, text="Quantidade ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=quantidade).pack(side=TOP, padx=10, fill=X)
Label(LFrom, text="Preço ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=preço).pack(side=TOP, padx=10, fill=X)
Button(LFrom, text="Submeter", font=("Arial", 10, "bold"), bg="cyan",
command=register).pack(side=TOP, padx=10, pady=5, fill=X)
lbl_txtsearch = Label(LeftViewForm, text="Data (YYYY-MM-DD)",
font=('verdana', 10), bg="#0B4670")
lbl_txtsearch.pack()
Entry(LeftViewForm, textvariable=SEARCH, font=('verdana', 15),
width=10).pack(side=TOP, padx=10, fill=X)
Button(LeftViewForm, text="Pesquisa", bg="cyan",
command=SearchRecord).pack(side=TOP, padx=10, pady=10, fill=X)
lbl_txtsearch2 = Label(LeftViewForm, text="Estado",
font=('verdana', 10), bg="#0B4670")
lbl_txtsearch2.pack()
SEARCH2.set("Selecionar Estado da Peça")
content2 = {'Pedido', 'Em espera', 'Recebido'}
OptionMenu(LeftViewForm,SEARCH2, *content2).pack(side=TOP, padx=10, pady=10, fill=X)
Button(LeftViewForm, text="Pesquisa", bg="cyan",
command=SearchRecordByState).pack(side=TOP, padx=10, pady=10, fill=X)
Button(LeftViewForm, text="Ver tudo", bg="cyan",
command=DisplayData).pack(side=TOP, padx=10, pady=10, fill=X)
Button(LeftViewForm, text="Limpar", bg="cyan",
command=limpar).pack(side=TOP, padx=10, pady=10, fill=X)
Button(LeftViewForm, text="Apagar", bg="cyan",
command=apagar).pack(side=TOP, padx=10, pady=10, fill=X)
Button(LeftViewForm, text="Atualizar", bg="cyan",
command=actualizacao).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", "NomePeca",
"Data", "Estado", "Quantidade", "Preco", "Custototal"),
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('NomePeca', text="Nome da Peça", anchor=W)
tree.heading('Data', text="Data", anchor=W)
tree.heading('Estado', text="Estado", anchor=W)
tree.heading('Quantidade', text="Quantidade", anchor=W)
tree.heading('Preco', text="Preço", anchor=W)
tree.heading('Custototal', text="Custo total", anchor=W)
tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=50)
tree.column('#2', stretch=NO, minwidth=0, width=100)
tree.column('#3', stretch=NO, minwidth=0, width=150)
tree.column('#4', stretch=NO, minwidth=0, width=150)
tree.column('#5', stretch=NO, minwidth=0, width=150)
tree.column('#6', stretch=NO, minwidth=0, width=150)
tree.pack()
DisplayData()
root.mainloop()
def register():
Database()
nomepeca = Nomedapeça.get()
vdata = data.get()
vquantidade = quantidade.get()
vpreco = preço.get()
vestado = estado.get()
vcustototal = vquantidade * vpreco
if nomepeca == '' or vdata == "" or vquantidade == 0 or vpreco == 0 or vestado == "Selecionar Estado da Peça":
tkMessageBox.showinfo("Atenção", "Preencha os espaços vazios!!!")
else:
cursor.execute('INSERT INTO REGISTRATION (NOMEPECA, DATA, QUANTIDADE, PRECO, ESTADO, CUSTOTOTAL) VALUES (?, ?, ?, ?, ?, ?)',
(nomepeca, vdata, vquantidade, vpreco, vestado, vcustototal))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro adicionado com sucesso")
DisplayData()
conn.close()
def DisplayData():
Database()
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION")
for row in cursor.fetchall():
tree.insert('', 'end', values=row)
cursor.close()
conn.close()
def SearchRecord():
Database()
search_date = SEARCH.get()
if search_date != "":
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION WHERE DATA = ?", (search_date,))
for row in cursor.fetchall():
tree.insert('', 'end', values=row)
cursor.close()
conn.close()
def SearchRecordByState():
Database()
search_state = SEARCH2.get()
if search_state != "":
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION WHERE ESTADO = ?", (search_state,))
for row in cursor.fetchall():
tree.insert('', 'end', values=row)
cursor.close()
conn.close()
def actualizacao():
Database()
nomepeca = Nomedapeça.get()
vdata = data.get()
vquantidade = quantidade.get()
vpreco = preço.get()
vestado = estado.get()
vcustototal = vquantidade * vpreco
if nomepeca == '' or vdata == '' or vquantidade == 0 or vpreco == 0 or vestado == "Selecionar Estado da Peça":
tkMessageBox.showinfo("Atenção", "Preencha todos os espaços!!!")
else:
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
conn.execute('UPDATE REGISTRATION SET NOMEPECA=?, DATA=?, QUANTIDADE=?, PRECO=?, ESTADO=?, CUSTOTOTAL=? WHERE RID = ?',
(nomepeca, vdata, vquantidade, vpreco, vestado, vcustototal, selecteditem[0]))
conn.commit()
tkMessageBox.showinfo("Mensagem", "Atualizado com sucesso")
limpar()
DisplayData()
conn.close()
def apagar():
Database()
if not tree.selection():
tkMessageBox.showwarning("Atenção", "Selecione o registro a ser apagado")
else:
result = tkMessageBox.askquestion('Confirmar', 'Deseja apagar o registro selecionado?', 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()
tkMessageBox.showinfo("Sucesso", "Registro apagado com sucesso")
conn.close()
def limpar():
tree.delete(*tree.get_children())
SEARCH.set("")
SEARCH2.set("")
Nomedapeça.set("")
data.set(date.today().strftime("%Y-%m-%d"))
quantidade.set(0.0)
preço.set(0.0)
estado.set("Selecionar Estado da Peça")
DisplayData()
if __name__ == '__main__':
Database()
DisplayForm()