├── requirements.txt ├── .gitignore ├── background.gif ├── README.md └── PythonSales.py /requirements.txt: -------------------------------------------------------------------------------- 1 | appjar -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DataVendas 2 | .relatorio.txt -------------------------------------------------------------------------------- /background.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lucascz37/PythonSales/HEAD/background.gif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python Sales 2 | - Pequeno Programa de Vendas, Controle de Estoque e Relatório de Vendas 3 | 4 | # Tecnologias utilizadas: 5 | 6 | ## Linguagem: 7 | - Python3 8 | 9 | ## Para as interfaces: 10 | - AppJar 11 | - Tkinter 12 | 13 | # Como executar: 14 | 15 | - Primeiro, você precisa baixar as bibliotecas necessárias: AppJar e Tkinter. Para instalar o AppJar, execute: 16 | 17 | ```bash 18 | $ pip install -r requirements.txt 19 | ``` 20 | 21 | - Agora você precisa do tkinter, caso já não tenha instalado em sua máquina, execute: 22 | 23 | ```bash 24 | $ sudo apt-get install python3-tk 25 | ``` 26 | 27 | - E pronto, você está pronto para executar a aplicação, basta rodar o comando: 28 | 29 | ```bash 30 | $ python PythonSales.py 31 | ``` 32 | -------------------------------------------------------------------------------- /PythonSales.py: -------------------------------------------------------------------------------- 1 | from appJar import gui 2 | import shelve 3 | data = shelve.open("DataVendas", writeback=True) 4 | 5 | try: 6 | print(data['produtos'][0]) 7 | except: 8 | data['produtos'] = [] 9 | data['preco'] = [] 10 | data['quantidade'] = [] 11 | data['itensVendidos'] = [] 12 | data['apurado'] = 0 13 | data['quantidadeVendida'] = 0 14 | # Começo das funções 15 | # Função Menu 16 | 17 | 18 | def menu(valor): 19 | app.removeAllWidgets() 20 | if valor == "SCRIPT": 21 | app.setBgImage("background.gif") 22 | app.addLabel("inicio", "Python_Sales", 0, 0) 23 | app.entry("Produto:", label=True) 24 | app.setEntryUpperCase("Produto:") 25 | app.entry("Valor do Produto:", label=True) 26 | app.entry("Quantidade:", label=True) 27 | app.addButton("Salvar", salvar) 28 | elif valor == "SEARCH": 29 | pesquisa = app.stringBox("Pesquisa", "Digite o nome do Item para Pesquisa:") 30 | if pesquisa == "" or pesquisa is None: 31 | pesquisa = " " 32 | x = 0 33 | retornoPesquisa = "" 34 | while x < len(data['produtos']): 35 | if pesquisa[0].upper() == data['produtos'][x][0]: 36 | retornoPesquisa = retornoPesquisa + str(data['produtos'][x]) + " R$:" + str(data['preco'][x]) + "\n" 37 | x = x+1 38 | app.infoBox("Lista de Produtos", "Produtos achados:\n" + retornoPesquisa) 39 | elif valor == "PREFERENCES": 40 | app.setBgImage("background.gif") 41 | app.addLabel("inicio", "Python_Sales", 0, 0) 42 | lista = "" 43 | x = 0 44 | while x < len(data['produtos']): 45 | lista = lista + data['produtos'][x] + " R$:" + str(data['preco'][x]) + " Quantidade:" + \ 46 | str(data['quantidade'][x]) + "\n" 47 | x = x + 1 48 | app.addScrolledTextArea("Lista de Produtos", text=lista) 49 | app.addButton("Criar lista", arquivoLista) 50 | elif valor == "SETTINGS": 51 | app.setBgImage("background.gif") 52 | app.addLabel("inicio", "Python_Sales", 0, 0) 53 | app.addLabelAutoEntry("Item:", data['produtos']) 54 | app.setEntryUpperCase("Item:") 55 | app.entry("Quantidade:", label=True) 56 | app.addButton("Alterar", atualizacao) 57 | elif valor == "CART-ALT-2": 58 | app.setBgImage("background.gif") 59 | app.addLabel("inicio", "Python_Sales", 0, 0, 2) 60 | app.addLabelAutoEntry("Produto:", data['produtos'], 1, 0, 2) 61 | app.setEntryUpperCase("Produto:") 62 | app.addLabelEntry("Valor:", 2, 0, 2) 63 | app.addButton("Realizar Venda", venda, 3, 0) 64 | app.addButton("Valor do Produto", adcionar, 3, 1) 65 | elif valor == "CLOSE": 66 | app.setBgImage("background.gif") 67 | app.addLabel("inicio", "Python_Sales", 0, 0) 68 | app.addLabelAutoEntry("Produto:", data['produtos']) 69 | app.setEntryUpperCase("Produto:") 70 | app.addButton("Remover Produto", remover) 71 | elif valor == "PRINT": 72 | app.setBgImage("background.gif") 73 | app.addLabel("inicio", "Python_Sales", 0, 0) 74 | app.addLabel("Apurado", "Valor Apurado em Vendas:R$ " + str(data['apurado'])) 75 | app.addLabel("Vendidos", "Quantidade de Itens Vendidos: " + str(data['quantidadeVendida'])) 76 | app.addButton("Relatorio de Produtos Vendidos", arquivoVendas) 77 | 78 | 79 | # função Menu Salvar 80 | def salvar(valorBotao): 81 | if valorBotao == "Salvar": 82 | if app.getEntry("Produto:") != "" and app.getEntry("Valor do Produto:") != "" and app.getEntry("Quantidade:")\ 83 | != "": 84 | produto = str(app.getEntry("Produto:")) 85 | try: 86 | valor = float(app.getEntry("Valor do Produto:")) 87 | quantidade = float(app.getEntry("Quantidade:")) 88 | if quantidade >= 0 and app.getEntry("Produto:") not in data['produtos']: 89 | data['produtos'].append(produto) 90 | data['preco'].append(valor) 91 | data['quantidade'].append(quantidade) 92 | app.infoBox("Salvo", "Produto Salvo com sucesso!") 93 | app.clearEntry("Produto:") 94 | app.clearEntry("Valor do Produto:") 95 | app.clearEntry("Quantidade:") 96 | else: 97 | app.infoBox("Quantidade", "Quantidade Invalida ou Produto já adcionado") 98 | except ValueError: 99 | app.warningBox("Valor Invalido", "Valor inserido não é inteiro.") 100 | else: 101 | app.warningBox("Sem Dados", "Campo(s) Vazios") 102 | 103 | 104 | #Função Menu Alterar Quantidade 105 | def atualizacao(valorBotao): 106 | if valorBotao == "Alterar": 107 | try: 108 | indice = data['produtos'].index(app.getEntry("Item:")) 109 | if float(app.getEntry("Quantidade:")) >= 0: 110 | data['quantidade'][indice] = float(app.getEntry('Quantidade:')) 111 | app.infoBox("Alteração", "Alterado") 112 | else: 113 | app.infoBox("Quantidade", "Quantidade Invalida") 114 | except: 115 | app.warningBox("Valor Invalido", "Alguns Dos Campos Está Incorreto") 116 | 117 | 118 | #Função de Venda 119 | def venda(valorBotao): 120 | if valorBotao == "Realizar Venda": 121 | try: 122 | indice = data['produtos'].index(app.getEntry("Produto:")) 123 | if data['quantidade'][indice] > 0: 124 | valor = float(app.getEntry("Valor:")) 125 | data['quantidadeVendida'] = data['quantidadeVendida'] + 1 126 | data['apurado'] = data['apurado'] + valor 127 | data['quantidade'][indice] = data['quantidade'][indice] - 1 128 | data['itensVendidos'].append([data['produtos'][indice], valor]) 129 | app.infoBox("Venda", "Venda Cadastrada!") 130 | else: 131 | app.infoBox("Sem Estoque", "Produto Sem Estoque") 132 | except: 133 | app.infoBox("Produto Não Cadastrado", "Valor Invalido ou Produto Não Cadastrado") 134 | 135 | 136 | #Função Para Preencher o Valor 137 | def adcionar(valorBotao): 138 | if valorBotao == "Valor do Produto": 139 | try: 140 | indice = data['produtos'].index(app.getEntry("Produto:")) 141 | app.setEntry("Valor:", data['preco'][indice]) 142 | except: 143 | app.warningBox("Error", "Erro Para Conseguir Valor do Produto ou Produto Inexistente") 144 | 145 | 146 | #função Para criar arquivos com vendas 147 | def arquivoVendas(valorBotao): 148 | if valorBotao == "Relatorio de Produtos Vendidos": 149 | relatorio = open("relatorio.txt", 'w') 150 | relatorio.write("Valor Apurado em Vendas:R$ " + str(data['apurado']) + "\n") 151 | relatorio.write("Quantidade de Itens Vendidos: " + str(data['quantidadeVendida']) + "\n") 152 | x = 0 153 | while x < len(data['itensVendidos']): 154 | relatorio.write(str(data['itensVendidos'][x][0]) + " R$:"+ str(data['itensVendidos'][x][1]) + "\n") 155 | x = x + 1 156 | relatorio.close() 157 | app.infoBox("Relatório", "Relatório Gerado") 158 | 159 | 160 | #função para criar arquivo de lista e quantidade de produtos 161 | def arquivoLista(valorBotao): 162 | if valorBotao == "Criar lista": 163 | listaSalvar = "" 164 | x = 0 165 | while x < len(data['produtos']): 166 | listaSalvar = listaSalvar + data['produtos'][x] + " R$:" + str(data['preco'][x]) + " Quantidade:" + \ 167 | str(data['quantidade'][x]) + "\n" 168 | x = x + 1 169 | relatorioLista = open("Lista de Produtos.txt", 'w') 170 | relatorioLista.write(listaSalvar) 171 | relatorioLista.close() 172 | app.infoBox("Gerado", "Lista Gerada") 173 | 174 | 175 | #função de remover produtos: 176 | def remover(valorBotao): 177 | if valorBotao == "Remover Produto": 178 | if str(app.getEntry("Produto:")) in data['produtos']: 179 | indice = data['produtos'].index(app.getEntry("Produto:")) 180 | del data['produtos'][indice] 181 | del data['preco'][indice] 182 | del data['quantidade'][indice] 183 | app.infoBox("Removido", "Produto Removido Com Sucesso") 184 | else: 185 | app.infoBox("Não Encontrado", "Produto Não Cadastrado No Sistema") 186 | 187 | 188 | # fim das funções 189 | app = gui("PythonSales", "378x265") 190 | 191 | 192 | app.setBg("LIGHTBLUE") 193 | app.setBgImage("background.gif") 194 | opcoes = ["SCRIPT", "SEARCH", "PREFERENCES", "SETTINGS", "CART-ALT-2", "CLOSE", "PRINT"] 195 | app.addToolbar(opcoes, menu, findIcon=True) 196 | app.addStatusbar(fields=2) 197 | app.setStatusbar("Autor:Lucas Andrade", 0) 198 | app.setStatusbar("Python_Sales v3.0", 1) 199 | app.addLabel("inicio", "Python_Sales") 200 | app.addLabel("Instruções", "1-Adicionar Produtos\n2-Pesquisar Produtos\n3-Exibir Lista de Produtos\n4-Alterar " 201 | "Quantidade\n5-Realizar Venda\n6-Remover Produto\n7-Controle de Lucro e Vendas") 202 | #Quem olhar é gado! 203 | app.go() 204 | --------------------------------------------------------------------------------