# -*- coding: utf-8 -*- from PyQt5.QtWidgets import QCompleter, QLineEdit from PyQt5.QtCore import QDate, QDateTime, Qt, QStringListModel from PyQt5.QtGui import QIntValidator, QDoubleValidator from functools import partial from Crud.CrudProduto import CrudProduto class Comercial(object): """ Funcoes das Telas de Venda e Compra """ def validaCampos(self): # Setando Validadot Int nos campos validaInt = QIntValidator(0, 9999) self.tx_IdBuscaItem.setValidator(validaInt) self.tx_Id.setValidator(validaInt) # Setando Validador float nos campos validarValor = QDoubleValidator(0.00, 999.99, 2) validarValor.setNotation(QDoubleValidator.StandardNotation) validarValor.setDecimals(2) self.tx_Desconto.setValidator(validarValor) self.tx_Frete.setValidator(validarValor) self.tx_QntdItem.setValidator(validarValor) # Setando Datas Padrão def setDatas(self): self.dt_Emissao.setDate(QDate.currentDate()) self.dt_Prazo.setDate(QDate.currentDate().addDays(2)) self.dt_Entrega.setDate(QDate.currentDate()) self.dt_Vencimento.setDate(QDate.currentDate()) # Setando Icone dos Botoes def setIcones(self): # Icone Botoes self.IconeBotaoMenu(self.bt_Salvar, self.resourcepath('Images/salvar.png')) self.IconeBotaoMenu(self.bt_Voltar, self.resourcepath('Images/cancelar.png')) self.IconeBotaoMenu( self.bt_Entregar, self.resourcepath('Images/ico_entrega.png')) self.IconeBotaoMenu(self.bt_Imprimir, self.resourcepath('Images/gtk-print.png')) self.IconeBotaoMenu(self.bt_GerarParcela, self.resourcepath('Images/ico_conta.png')) self.IconeBotaoForm(self.bt_IncluirItem, self.resourcepath('Images/addPedido.svg')) # Definindo Tamanho das tabelas def tamanhoTabelas(self): # Tamanho das Colunas Tabela Itens self.tb_Itens.blockSignals(True) self.tb_Itens.setColumnHidden(0, True) self.tb_Itens.setColumnHidden(7, True) self.tb_Itens.resizeRowsToContents() self.tb_Itens.setColumnWidth(1, 165) self.tb_Itens.setColumnWidth(2, 150) self.tb_Itens.setColumnWidth(3, 75) self.tb_Itens.setColumnWidth(4, 75) self.tb_Itens.setColumnWidth(5, 75) self.tb_Itens.setColumnWidth(6, 45) # Tamanho tabela parcelas self.tb_Parcelas.blockSignals(True) self.tb_Parcelas.setColumnHidden(0, True) self.tb_Parcelas.setColumnWidth(1, 90) self.tb_Parcelas.setColumnWidth(2, 60) self.tb_Parcelas.setColumnWidth(3, 80) self.tb_Parcelas.setColumnWidth(4, 90) def acaoCalculo(self): # calculando com desconto self.tx_Desconto.returnPressed.connect(self.TotalFinal) self.tx_Desconto.returnPressed.connect(self.tx_Frete.setFocus) self.tx_Desconto.returnPressed.connect(self.tx_Frete.selectAll) # calculando com frete self.tx_Frete.returnPressed.connect(self.TotalFinal) self.tx_Frete.returnPressed.connect(self.tx_valorRecebido.setFocus) self.tx_Frete.returnPressed.connect(self.tx_valorRecebido.selectAll) def ValidaFormAdd(self): if not self.tx_Id.text(): self.tx_Id.setFocus() elif not self.tx_BuscaItem.text(): self.tx_BuscaItem.setFocus() elif not self.tx_BuscaItem.text(): self.tx_BuscaItem.setFocus() elif not self.tx_QntdItem.text(): self.tx_QntdItem.setFocus() elif not self.tx_NomeFantasia.text(): self.tx_NomeFantasia.setFocus() else: self.AddItemTabela() # Adiciona Item a tabela def AddItemTabela(self): row = self.tb_Itens.rowCount() self.tb_Itens.insertRow(row) self.conteudoTabela(self.tb_Itens, row, 0, self.tx_IdBuscaItem.text()) self.conteudoTabelaLeft(self.tb_Itens, row, 1, self.tx_BuscaItem.text()) self.conteudoTabelaLeft(self.tb_Itens, row, 2, self.tx_ObsItem.text()) self.conteudoTabela(self.tb_Itens, row, 3, self.tx_QntdItem.text().replace(',', '.')) self.conteudoTabela(self.tb_Itens, row, 4, self.tx_ValorUnitarioItem.text()) self.conteudoTabela(self.tb_Itens, row, 5, self.tx_ValorTotalItem.text()) self.botaoRemoveItem(self.tb_Itens, row, 6, partial(self.RemoveLInha, row), "#005099") self.conteudoTabela(self.tb_Itens, row, 7, str( QDateTime.toMSecsSinceEpoch(QDateTime.currentDateTime()))) self.TotalFinal() self.LimpaCampoAddProduto() self.bt_GerarParcela.setEnabled(True) # Calcular total de Venda e Compra def TotalFinal(self): total = 0 if not int(self.tb_Itens.rowCount()) == 0 and self.tb_Itens.item(0, 5).text(): for row in range(self.tb_Itens.rowCount()): total = float(self.tb_Itens.item(row, 5).text()) + total self.lb_SubTotal.setText(format(total, ".2f")) self.tx_TotalFinal.setText(format(total, ".2f")) self.lb_ValorPendente.setText(format(total, ".2f")) if self.tx_Desconto.text(): desconto = self.tx_Desconto.text().replace(',', '.') TotalFinal = float(total) - float(desconto) self.tx_TotalFinal.setText(format(TotalFinal, ".2f")) self.tx_Desconto.setText( format(float(desconto), ".2f")) self.lb_ValorPendente.setText(format(TotalFinal, ".2f")) if self.tx_Frete.text(): frete = self.tx_Frete.text().replace(',', '.') TotalFinal = float( total) - float(self.tx_Desconto.text()) + float(frete) self.tx_Frete.setText(format(float(frete), ".2f")) self.tx_TotalFinal.setText(format(TotalFinal, ".2f")) self.lb_ValorPendente.setText(format(TotalFinal, ".2f")) if self.tx_valorRecebido.text(): recebido = self.tx_valorRecebido.text().replace(",", ".") TotalFinal = float(self.tx_TotalFinal.text()) - \ float(recebido) self.tx_valorRecebido.setText( format(float(recebido), ".2f")) self.lb_ValorPendente.setText(format(TotalFinal, ".2f")) pass # Limpando campos após adicionar produdo def LimpaCampoAddProduto(self): for filho in self.fr_addProduto.findChildren(QLineEdit): filho.clear() self.bt_IncluirItem.setDisabled(True) self.tx_IdBuscaItem.setFocus() # Gerando parcelas Venda e Compra def gerarParcela(self, acao): numParcela = int(self.cb_QtdeParcela.currentData()) valorTotal = self.tx_TotalFinal.text() valor_parcela = float(valorTotal) / numParcela while self.tb_Parcelas.rowCount() > 0: self.tb_Parcelas.removeRow(0) pass for i in range(numParcela): self.tb_Parcelas.insertRow(i) self.dt_tabela(self.tb_Parcelas, i, 1, QDate.addMonths( self.dt_Vencimento.date(), i), 2) self.conteudoTabela(self.tb_Parcelas, i, 2, format(valor_parcela, ".2f")) self.botaoReceberParcela(self.tb_Parcelas, i, 4, partial(self.Receber, i), acao, 1) self.tx_tabelaReceber(self.tb_Parcelas, i, 3, 2, '') pass # Validar valor Recebido def validarRecebimento(self): valorRecebido = float(self.tx_ValorPago.text().replace(',', '.')) valorPendente = float(self.lb_ValorPendente.text().replace(',', '.')) if valorRecebido > valorPendente: self.tx_ValorPago.setText(format(valorPendente, '.2f')) # Setando auto complete def setAutocomplete(self): # Setando Auto complete self.completer = QCompleter(self) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCompletionMode(QCompleter.PopupCompletion) self.model = QStringListModel(self) self.completer.setModel(self.model) self.tx_BuscaItem.setCompleter(self.completer) self.tx_NomeFantasia.setCompleter(self.completer) # AutoComplete Produtos def autocompleteProduto(self): busca = CrudProduto() busca.produto = self.tx_BuscaItem.text() busca.autoCompleteProduto() lista = [] if busca.produto: self.model.setStringList(busca.produto) # Busca Produto por nome def BuscaProdutoNome(self): busca = CrudProduto() busca.produto = self.tx_BuscaItem.text() busca.buscaProdutoNome() self.tx_IdBuscaItem.setText(str(busca.id)) self.BuscaProdutoId()