Mundo em Python

Inventário de Produtos

from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
import sqlite3
# Conectar ao banco de dados SQLite e criar a tabela, se não existir
def Database():
global conn, cursor
conn = sqlite3.connect("Vendas_compras.db")
cursor = conn.cursor()
cursor.execute(
"CREATE TABLE IF NOT EXISTS REGISTRATION (RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, NOME TEXT, "
"QUANTIDADE INTEGER, PRECO REAL, OPCAO TEXT, EMPRESA TEXT, CONTACTO TEXT, CUSTO_TOTAL REAL)")
conn.commit()
def DisplayForm():
root = Tk()
root.geometry("900x600")
root.title("Inventário")
global tree
global SEARCH
global nome_produto, quantidade_produto, preco_produto, empresa, contacto, estatuto
global saldo_compras, saldo_vendas
SEARCH = StringVar()
nome_produto = StringVar()
quantidade_produto = StringVar()
preco_produto = StringVar()
empresa = StringVar()
contacto = StringVar()
estatuto = StringVar() saldo_compras = DoubleVar(value=0.0)
saldo_vendas = DoubleVar(value=0.0) TopViewForm = Frame(root, width=600, bd=1, relief=SOLID)
TopViewForm.pack(side=TOP, fill=X) SaldoForm = Frame(root, width=600, bd=1, relief=SOLID, bg="cyan")
SaldoForm.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="Inventário", font=('verdana', 18), width=600, bg="cyan")
lbl_text.pack(fill=X) Label(SaldoForm, text="Saldo de Compras: ", font=("Arial", 12), bg="cyan").pack(side=LEFT, padx=10, pady=10)
Label(SaldoForm, textvariable=saldo_compras, font=("Arial", 12), bg="cyan").pack(side=LEFT, padx=10, pady=10) Label(SaldoForm, text="Saldo de Vendas: ", font=("Arial", 12), bg="cyan").pack(side=LEFT, padx=10, pady=10)
Label(SaldoForm, textvariable=saldo_vendas, font=("Arial", 12), bg="cyan").pack(side=LEFT, padx=10, pady=10) Label(LFrom, text="Nome do Produto ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=nome_produto).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Quantidade do Produto ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=quantidade_produto).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Preço do Produto ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=preco_produto).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Opção ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
estatuto.set("Selecionar Opção")
content = {'Compra', 'Venda'}
OptionMenu(LFrom, estatuto, *content).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Empresa ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=empresa).pack(side=TOP, padx=10, fill=X) Label(LFrom, text="Contacto ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=contacto).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="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", "Nomeproduto", "Quantidadeproduto", "Preco", "Opcao", "Empresa", "Contacto", "Custo_Total"),
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('Nomeproduto', text="Nome do Produto", anchor=W)
tree.heading('Quantidadeproduto', text="Quantidade do Produto", anchor=W)
tree.heading('Preco', text="Preço do Produto", anchor=W)
tree.heading('Opcao', text="Opção", anchor=W)
tree.heading('Empresa', text="Empresa", anchor=W)
tree.heading('Contacto', text="Contacto", anchor=W)
tree.heading('Custo_Total', 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=100)
tree.column('#4', stretch=NO, minwidth=0, width=100)
tree.column('#5', stretch=NO, minwidth=0, width=100)
tree.column('#6', stretch=NO, minwidth=0, width=100)
tree.column('#7', stretch=NO, minwidth=0, width=100)
tree.column('#8', stretch=NO, minwidth=0, width=100) tree.pack() DisplayData()
root.mainloop()
def register():
Database()
vnome_produto = nome_produto.get()
vquantidade_produto = quantidade_produto.get()
vpreco_produto = preco_produto.get()
vestatuto = estatuto.get()
vempresa = empresa.get()
vcontacto = contacto.get() if vnome_produto == '' or vquantidade_produto == '' \
or vpreco_produto == '' or vestatuto == '' or vempresa == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Preencha todos os espaços!!!")
else:
vquantidade_produto = float(vquantidade_produto)
vpreco_produto = float(vpreco_produto)
custo_total = vquantidade_produto * vpreco_produto
conn.execute(
'INSERT INTO REGISTRATION '
'(NOME, QUANTIDADE, PRECO, OPCAO, EMPRESA, CONTACTO, CUSTO_TOTAL) VALUES (?, ?, ?, ?, ?, ?, ?)',
(vnome_produto, vquantidade_produto, vpreco_produto, vestatuto, vempresa, vcontacto, custo_total))
conn.commit()
if vestatuto == "Compra":
saldo_compras.set(saldo_compras.get() + custo_total)
elif vestatuto == "Venda":
saldo_vendas.set(saldo_vendas.get() + custo_total)
tkMessageBox.showinfo("Sucesso", "Registro adicionado com sucesso")
DisplayData()
conn.close()
def SearchRecord():
Database()
if SEARCH.get() != "":
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION WHERE NOME LIKE ?", ('%' + str(SEARCH.get()) + '%',))
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
def actualizacao():
Database()
vnome_produto = nome_produto.get()
vquantidade_produto = quantidade_produto.get()
vpreco_produto = preco_produto.get()
vestatuto = estatuto.get()
vempresa = empresa.get()
vcontacto = contacto.get() if vnome_produto == '' or vquantidade_produto == '' \
or vpreco_produto == '' or vestatuto == '' or vempresa == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Preencha todos os espaços!!!")
else:
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
vquantidade_produto = float(vquantidade_produto)
vpreco_produto = float(vpreco_produto)
custo_total = vquantidade_produto * vpreco_produto
conn.execute(
'UPDATE REGISTRATION SET NOME=?, QUANTIDADE=?, PRECO=?, OPCAO=?, '
'EMPRESA=?, CONTACTO=?, CUSTO_TOTAL=? WHERE RID = ?',
(vnome_produto, vquantidade_produto, vpreco_produto, vestatuto, vempresa, vcontacto, custo_total,
selecteditem[0]))
conn.commit()
if selecteditem[4] == "Compra":
saldo_compras.set(saldo_compras.get() - selecteditem[7] + custo_total)
elif selecteditem[4] == "Venda":
saldo_vendas.set(saldo_vendas.get() - selecteditem[7] + custo_total)
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()
if selecteditem[4] == "Compra":
saldo_compras.set(saldo_compras.get() - selecteditem[7])
elif selecteditem[4] == "Venda":
saldo_vendas.set(saldo_vendas.get() - selecteditem[7])
tkMessageBox.showinfo("Sucesso", "Registro apagado com sucesso")
conn.close()
def limpar():
tree.delete(*tree.get_children())
DisplayData()
SEARCH.set("")
nome_produto.set("")
quantidade_produto.set("")
preco_produto.set("")
estatuto.set("Selecionar Opção")
empresa.set("")
contacto.set("")
def DisplayData():
Database()
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION")
fetch = cursor.fetchall()
total_compras = 0.0
total_vendas = 0.0
for data in fetch:
tree.insert('', 'end', values=(data))
if data[4] == "Compra":
total_compras += data[7]
elif data[4] == "Venda":
total_vendas += data[7]
saldo_compras.set(total_compras)
saldo_vendas.set(total_vendas)
cursor.close()
conn.close()
DisplayForm()
if __name__ == '__main__':
mainloop()
0