def atualizar_interface(self, mercadoria_id): self.limpar_dados() if not mercadoria_id or mercadoria_id == '': return dados = self.db.get_registro( "fnc_get_mercadoria" , "mercadoria_id" , mercadoria_id ) if dados[0]: dados = dados[1][0]['json_mercadoria'] self.popular_interface(dados) else: dialog = StatusDialog( status='ERRO' , exception=dados , mensagem='Erro ao buscar dados.' , parent=self ) dialog.exec()
def configura_tipo(self): self.tipo_pedido = 'VENDA' if not self.tipo_pedido else self.tipo_pedido if self.tipo_pedido == 'VENDA': self.tipo_pessoa = 'Cliente' self.view_busca = 'vw_pedido_venda' self.formGroupBox_pessoa.setTitle(self.tipo_pessoa) self.horizontalFrame_tipo_item.setVisible(True) self.label_data.setText('Data entrega') self.help = \ '''Aqui podem ser realizadas vendas (remanufaturas e mercadorias). Quando tiver terminado de cadastrar a venda é só encerrar o pedido para confirmar a venda. Vendas encerradas devem ser estornadas para que possam ser editadas.''' elif self.tipo_pedido == 'COMPRA': self.tipo_pessoa = 'Fornecedor' self.view_busca = 'vw_pedido_compra' self.formGroupBox_pessoa.setTitle(self.tipo_pessoa) self.radioButton_mercadoria.setChecked(True) self.horizontalFrame_tipo_item.setVisible(False) self.label_data.setText('Data compra') self.help = \ '''Aqui podem ser registradas as suas compras. Quando tiver terminado de cadastrar é só encerrar o pedido para confirmar a entrada da mercadoria. Compras encerradas devem ser estornadas para que possam ser editadas.''' else: dialog = StatusDialog(status='ERRO', mensagem='TIPO DE PEDIDO ' + str(self.tipo_pedido) + ' INVÁLIDO', parent=self) dialog.exec()
def abrir_manual(self): import platform, subprocess filepath = os.path.join('Resources', 'misc', 'manual-soad.pdf') logging.info('[MainWindow] Abrindo manual...') try: if platform.system() == 'Darwin': subprocess.call(('open', filepath)) elif platform.system() == 'Windows': try: os.startfile(filepath) except Exception as e: logging.debug('[MainWindow] Tentando método alternativo de abertura de arquivo devido a exceção: \n>' + str(e)) subprocess.run(['open', filepath], check=True) else: subprocess.call(('xdg-open', filepath)) except Exception as e: dialog = StatusDialog( status='ALERTA' , mensagem="Arquivo " + filepath + " não encontrado." , exception=e , parent=self ) logging.debug( '[MainWindow] Arquivo não encontrado: \n>' + str(e)) dialog.exec()
def configura_tipo(self): self.tipo = 'MERCADORIA' if not self.tipo else self.tipo if self.tipo == 'MERCADORIA': self.tipo = 'MERCADORIA' self.stackedWidget.setVisible(False) self.checkBox_permite_venda.setChecked(True) self.help = '''Aqui são cadastradas as mercadorias comuns.''' elif self.tipo == 'CASCO': self.campos_obrigatorios['Insumo'] = self.lineEdit_insumo_id self.campos_obrigatorios['Quantidade'] = self.lineEdit_quantidade_insumo self.campos_obrigatorios['Un. Medida (Insumo)'] = self.comboBox_unidade_medida_insumo self.stackedWidget.setVisible(True) self.page_insumo.setVisible(False) self.stackedWidget.setCurrentWidget(self.page_casco) self.help = '''Os cascos cadastrados podem ser utilizados em remanufaturas.''' elif self.tipo == 'INSUMO': self.campos_obrigatorios['Quantidade Embalagem'] = self.lineEdit_quantidade_embalagem self.campos_obrigatorios['Un. Medida (Embalagem)'] = self.comboBox_unidade_medida_embalagem self.stackedWidget.setVisible(True) self.page_casco.setVisible(False) self.stackedWidget.setCurrentWidget(self.page_insumo) self.help = '''Os insumos cadastrados podem ser utilizados em remanufaturas.''' else: dialog = StatusDialog( status='ERRO' , mensagem='TIPO DE MERCADORIA INVÁLIDO' , parent=self.parent_window) dialog.exec() return self.help = self.help + '''\nMercadorias inativas não podem ser utilizadas.\n Mercadorias que não permitem venda só podem ser utilizadas em remanufaturas.'''
def gerar_remanufaturas(self): if self.valida_obrigatorios() != 'OK': return self.lineEdit_insumo_id.setDisabled(True) self.lineEdit_casco_id.setDisabled(True) self.toolButton_insumo.setDisabled(True) self.toolButton_casco.setDisabled(True) casco_id = self.lineEdit_casco_id.text() insumo_id = self.lineEdit_insumo_id.text() quantidade = self.spinBox_quantidade.text() realizar = False dados = { "metodo": "fnc_gerar_remanufatura", "schema": "soad", "params": { "casco_id": casco_id, "insumo_id": insumo_id, "quantidade": quantidade, "realizar": realizar } } # pega ids das remanufturas geradas retorno = self.db.call_procedure(self.db.schema, dados) remanufaturas = list(dict()) if retorno[0]: remanufaturas_ids = retorno[1][0]['p_retorno_json'] remanufaturas_ids = remanufaturas_ids['remanufaturas_ids'] for remanufatura_id in remanufaturas_ids: remanufaturas.append( Remanufatura( remanufatura_id=remanufatura_id , casco_id=casco_id , insumo_id=insumo_id , situacao='CADASTRADA' if not realizar else 'REALIZADA' ) ) if self.localiza_item_lote(remanufaturas_ids[0]): self.popular_tabela(remanufaturas) else: dialog = StatusDialog( status='ERRO' , exception=retorno , mensagem='Erro ao buscar dados.' , parent=self ) dialog.exec()
def esta_em_modo_edicao(self): if not self.modo_edicao: dialog = StatusDialog( status='ERRO', mensagem='A interface não está em modo de edição!', parent=self.parent_window) return dialog.exec() else: logging.info('[CadastroPadrao] Está em modo de edição.') return True
def confirma_descarte(self): if self.textEdit_motivo.text() == '': dialog = StatusDialog(status='ALERTA', mensagem='É necessário informar um motivo.', parent=self) dialog.exec() return else: status = self.realizar_descarte() if status[0]: dialog = StatusDialog( status='OK', mensagem='Descarte realizado com sucesso!', parent=self) else: dialog = StatusDialog( status='ALERTA', mensagem= 'Não foi possível descartar todas as mercadorias selecionadas!\n', exception=status[1], parent=self) if dialog.exec(): self.close()
def valida_obrigatorios(self): if self.tableWidget_items.rowCount() == 0: dialog = StatusDialog( status='ALERTA' , mensagem='Não é possível realizar uma ' + self.tipo_pedido + ' sem itens.' , parent=self.parent_window , esconder_detalhes=True ) return dialog.exec() return super(CadastroPedido, self).valida_obrigatorios()
def buscar(self): valor = self.lineEdit_valor.text() operador = '=' campo = None for c in self.campos: if self.campos[c] == self.comboBox_campo.currentText(): campo = c try: valor = int(valor) operador = '=' except: try: valor = float(valor) operador = '=' except: valor = str(valor) operador = 'like' break valor = str(valor) if operador == '=': valor.replace('%', '') # retorna uma lista de dicionários retorno = self.db.busca_registro( self.tabela , campo , valor , operador , self.filtro ) if not retorno[0]: dialog = StatusDialog(status='ALERTA' , exception=retorno , mensagem="Não foi possível buscar os dados desse registro." , parent=self) retorno = retorno[0] dialog.exec() else: retorno = retorno[1][0]['fnc_buscar_registro'] self.preencher_tabela(retorno)
def get_data(self, filtro): if self.tabela: retorno = self.db.busca_registro(self.tabela, '', '', '=', filtro=filtro) metodo = 'fnc_buscar_registro' elif self.metodo: dados = { "metodo": self.metodo, "schema": self.db.schema, "params": { "coluna": '', "valor": '', "operador": '=', "filtro": filtro } } retorno = self.db.call_procedure(params=dados) else: return None if retorno[0]: retorno = retorno[1][0] if "fnc_buscar_registro" in retorno: retorno = retorno["fnc_buscar_registro"] elif "p_retorno_json" in retorno: retorno = retorno["p_retorno_json"][self.metodo] else: return None return retorno else: dialog = StatusDialog( status='ERRO', exception=retorno, mensagem="Não foi possível localizar os registros.", parent=self) dialog.exec() return retorno[0]
def login(self): if len(self.lineEdit_usuario.text()) == 0 \ or len(self.lineEdit_senha.text()) == 0: dialog = StatusDialog(mensagem="Por favor informe seu usuário e senha." , parent=self) dialog.exec() else: db = self.__setup_db_connection__() try: if db: if self.main is None: db.definir_schema('soad') self.main = MainWindow(db, self) self.main.setWindowIcon(self.icon) self.main.showMaximized() self.saved_config(action='save') self.hide() except Exception as e: logging.debug('[LoginDialog] ' + str(e)) self.saved_config(action='save') dialog = StatusDialog(status='ERRO' , mensagem="Erro ao abrir o sistema." , exception=e , parent=self) dialog.exec() return "Ok"
def movimentar(self, pedido_id): dialog = ConfirmDialog(self) dialog.definir_mensagem( 'Deseja realizar a movimentação dessa ' + self.tipo_pedido.capitalize() + '\n(Pedido: ' + str(pedido_id) + ')?\nO pedido não poderá mais ser editado.') if dialog.exec(): dados = { "metodo": "prc_encerrar_pedido", "schema": "soad", "params": {"pedido_id": str(pedido_id)} } retorno = self.db.call_procedure(self.db.schema, dados) self.atualizar_interface(pedido_id) if retorno[0]: retorno = retorno[1][0]['p_retorno'] if int(retorno) == int(100): return True else: return False else: dialog = StatusDialog( mensagem='Não foi possível realizar a movimentação do pedido.', exception=retorno, status='ALERTA' ) dialog.exec() return False else: self.atualizar_interface(pedido_id)
def retornar_selecionado(self): row = self.tableWidget_linhas.currentRow() item = self.db.busca_registro( self.tabela , self.colunas_chave[0] , self.tableWidget_linhas.item(row, 0).text() , '=') if item[0]: self.retorno_dados.emit(item) self.done(int(self.tableWidget_linhas.item(row, 0).text())) # retorna o ID else: dialog = StatusDialog(status='ALERTA' , exception=item[1] , mensagem="Não foi possível buscar os dados desse registro." , parent=self) dialog.exec()
def gerar_relatorio(self, dados): if not dados: logging.info( "[ListaPadrao] Nenhum dado informado para gerar o relatório.") return dados_relatorio = list() row = 0 for linha in dados: col = 0 linha_relatorio = dict() for coluna in self.colunas_relatorio: coluna_relatorio = self.colunas_relatorio[coluna] linha_relatorio[coluna] = linha[coluna] valor_tratado = self.tratar_valor(linha_relatorio, coluna) valor = str(valor_tratado[0]) alinhamento = str(valor_tratado[2]) linha_relatorio.pop(coluna) linha_relatorio[coluna_relatorio] = valor dados_relatorio.append(linha_relatorio) try: relatorio = RelatorioPadrao(dados_relatorio=dados_relatorio, title=self.titulo.replace( 'Lista', 'Relatório'), cabecalho=self.filtro_cab, page_size='A4', landscape=True, sort_column=self.sort_column_relatorio, sum_row=self.sum_row, totalizadores=self.totalizadores) pdf = relatorio.gerar_relatorio() relatorio.exibir_relatorio(pdf) except Exception as e: dialog = StatusDialog( status='ERRO', exception=e, mensagem="Não foi possível gerar o relatório.", parent=self) dialog.exec()
def valida_obrigatorios(self): if len(self.campos_obrigatorios) > 0: vermelho = "247, 192, 188" style = "border: 0.5px solid red; background: rgb({});".format( vermelho) print(style) for campo, valor in self.campos_obrigatorios.items(): valor.setStyleSheet("QLineEdit { background: white; }") try: if valor.text() == '': valor.setStyleSheet(style) dialog = StatusDialog(status='ALERTA', mensagem='O campo ' + campo + ' é obrigatório.', parent=self.parent_window) #return dialog.exec() return False except AttributeError as attr: if valor.currentText() == '': valor.setStyleSheet(style) dialog = StatusDialog(status='ALERTA', mensagem='O campo ' + campo + ' é obrigatório.', parent=self.parent_window) #return dialog.exec() return False except Exception as e: dialog = StatusDialog( status='ERRO', mensagem='Erro ao verificar campos obrigatórios.', exception=e, parent=self.parent_window) return dialog.exec() self.marca_obrigatorios() return 'OK'
def excluir(self, validar=True): if self.label_situacao.text() == 'CADASTRADO'\ or self.label_situacao.text() == 'ESTORNADO': acao = 'cancelamento' prc = 'prc_cancelar_pedido' elif self.label_situacao.text() == 'ENCERRADO': acao = 'estorno' prc = 'prc_estornar_pedido' else: logging.debug('[CadastroPedido] Situacao invalida=' + self.label_situacao.text()) return pedido_id = self.lineEdit_id.text() dialog = ConfirmDialog(self) dialog.definir_mensagem('Tem certeza que deseja realizar o ' + acao + ' desse pedido?') if dialog.exec(): self.dados = { "metodo": prc, "schema": "soad", "params": { "pedido_id": pedido_id } } retorno = super(CadastroPedido, self).excluir(validar=False) if retorno[0]: dialog = StatusDialog(status='OK' , mensagem=acao.capitalize() + ' realizado com sucesso.' , parent=self.parent_window) self.atualizar_interface(pedido_id) else: dialog = StatusDialog(status='ALERTA' , mensagem='Não foi possível realizar o ' + acao + ' do pedido.' , exception=retorno , parent=self.parent_window) dialog.exec()
def altera_uf(self): items = self.db.busca_registro("vw_municipio", "sigla_uf", self.comboBox_uf.currentText()) if items[0]: self.ufs_municipios = items[1][0]['fnc_buscar_registro'] self.comboBox_municipio.clear() if self.ufs_municipios is not None: for mun in self.ufs_municipios: self.comboBox_municipio.addItem(mun["municipio"]) else: dialog = StatusDialog( status='ALERTA', mensagem="Não foi possível localizar os municipios.", exception=items[1], parent=self.parent_window) dialog.exec()
def busca_ufs(self): # preenche estados items = self.db.busca_registro("vw_estado", "pais", "brasil") if items[0]: self.ufs = items[1][0]['fnc_buscar_registro'] self.comboBox_uf.clear() if self.ufs: for uf in self.ufs: self.comboBox_uf.addItem(uf["sigla_uf"]) self.comboBox_uf.setCurrentIndex(0) else: dialog = StatusDialog(status='ALERTA', exception=items[1], mensagem="Não foi possível localizar as UFs", parent=self.parent_window) dialog.exec()
def atualizar_interface(self, municipio_id=None): self.limpar_dados() if not municipio_id or municipio_id == '': return dados = self.db.busca_registro("vw_municipio", "id_municipio", str(municipio_id)) if dados[0]: dados = dados[1][0]['fnc_buscar_registro'][0] self.popular_interface(dados) else: dialog = StatusDialog(status='ERRO', exception=dados, mensagem='Erro ao buscar dados.', parent=self) dialog.exec()
def popular_dados_padrao(self): self.permite_venda_toggled() ### Fabricantes self.comboBox_fabricante.clear() items = self.db.busca_registro("vw_fabricante", "fabricante") if items[0]: items = items[1][0]['fnc_buscar_registro'] if items: for item in items: self.fabricantes.add(item['fabricante']) self.comboBox_fabricante.addItems(list(self.fabricantes)) else: dialog = StatusDialog(status='ALERTA' , mensagem="Não foi possível buscar os fabricantes" , exception=items[1] , parent=self.parent_window) dialog.exec() ### Unidades de medida self.comboBox_unidade_medida_insumo.clear() self.comboBox_unidade_medida_embalagem.clear() items = self.db.busca_registro("unidade_medida", "id_unidade_medida") if items[0]: items = items[1][0]['fnc_buscar_registro'] for item in items: self.unidades_medida[item['abreviacao']] = item['id_unidade_medida'] self.comboBox_unidade_medida_embalagem.addItems( list(self.unidades_medida.keys()) ) self.comboBox_unidade_medida_insumo.addItems( list(self.unidades_medida.keys()) )
def abrir_interface(self, window_cls, **kwargs): try: tela = window_cls( self.db , self.window_list , parent=None , **kwargs ) tela.setWindowIcon(self.windowIcon()) self.window_list.append(tela) except Exception as e: logging.exception('[MainWindow] ' + str(e)) dialog = StatusDialog( status='ERRO' , mensagem='Não foi possível abrir a interface' , exception=e , parent=self ) dialog.exec()
def confirma(self): if self.esta_em_modo_edicao(): if self.valida_obrigatorios() != 'OK': return False # pega os dados tela e envia pro banco prc = self.db.call_procedure(self.db.schema, self.dados) if prc[0]: if self.novo_cadastro: acao = 'realizado' else: acao = 'atualizado' dialog = StatusDialog(status='OK', mensagem='Cadastro ' + acao + ' com sucesso!', parent=self.parent_window) self.sair_modo_edicao() else: dialog = StatusDialog( status='ALERTA', mensagem='Não foi possível salvar os dados.', exception=prc, parent=self.parent_window) self.modo_edicao = True dialog.exec() return prc[0], prc[1][0]
def cadastrar_usuario(self): sql = ''' CREATE ROLE {username} WITH LOGIN SUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION CONNECTION LIMIT -1 PASSWORD '{password}'; '''.format(password=self.lineEdit_password.text(), username=self.lineEdit_username.text()) retorno = self.db.execute_sql(sql, as_dict=False) if retorno[0]: dialog = StatusDialog(status='OK', mensagem='Usuário cadastrado com sucesso!') else: dialog = StatusDialog( status='ALERTA', mensagem='Não foi possível cadastrar o usuário.', exception=str(retorno)) logging.debug('[CadastroUsuario] Retorno cadastro: ' + str(retorno)) dialog.exec()
def atualizar_interface(self, id_pedido): self.limpar_dados() self.pedido.pedido_id = id_pedido dados = self.db.get_registro( "fnc_get_pedido" , "pedido_id" , self.pedido.pedido_id ) if dados[0]: dados = dados[1][0]['json_pedido'] self.popular_interface(dados) self.tabWidget.setCurrentIndex(1) else: dialog = StatusDialog( status='ERRO' , exception=dados , mensagem='Erro ao buscar dados.' , parent=self ) dialog.exec()
def __setup_db_connection__(self): try: servidor = self.comboBox_servidor.currentText().split(':') db = DataBase( username=self.lineEdit_usuario.text() , password=self.lineEdit_senha.text() , host=servidor[0] , port=int(servidor[1]) ) db.abrir_conexao() return db except Exception as e: logging.debug('[LoginDialog] ' + str(e)) dialog = StatusDialog( status='ALERTA' , mensagem="Usuário ou senha inválidos." , exception=e , parent=self) dialog.exec() return False
def popular_dados_padrao(self): # preenche modalidades self.listWidget_modalidade.clear() items = self.db.busca_registro("modalidade", "id_modalidade") if items[0]: self.modalidades = items[1][0]['fnc_buscar_registro'] for mod in self.modalidades: mod['item'] = QListWidgetItem(mod["descricao"], self.listWidget_modalidade) else: dialog = StatusDialog( status='ALERTA', mensagem="Não foi possível localizar as Modalidades", exception=items[1], parent=self.parent_window) dialog.exec() # preenche estados items = self.db.busca_registro("vw_estado", "pais", "brasil") if items[0]: self.ufs = items[1][0]['fnc_buscar_registro'] self.comboBox_uf.clear() if self.ufs: for uf in self.ufs: self.comboBox_uf.addItem(uf["sigla_uf"]) self.comboBox_uf.setCurrentIndex(0) else: dialog = StatusDialog(status='ALERTA', exception=items[1], mensagem="Não foi possível localizar as UFs", parent=self.parent_window) dialog.exec() # preenche municipios self.altera_uf()
def esvaziar_embalagem(self, item_lote_id): # Marca lote sendo utilizado para recargas como vazio if item_lote_id is None: logging.info('[RegistroRemanufatura] Nenhum item lote selecionado para esvaziar.') return dialog = ConfirmDialog(parent=self) dialog.definir_mensagem( "Tem certeza que deseja marcar essa embalagem como 'Vazia'?\nEssa ação não pode ser desfeita.") if dialog.exec(): dados = { "metodo": "prc_esvaziar_item_lote" , "schema": "soad" , "params": { "item_lote_id": str(item_lote_id) } } retorno = self.db.call_procedure(self.db.schema, dados) logging.info('[RegistroRemanufatura] Executado procedimento para esvaziar lote.') if retorno[0]: if retorno[1][0]['p_retorno'] == 100: self.label_icone_item_lote.setPixmap(QPixmap.fromImage(self.vazio)) self.pushButton_esvaziar.setDisabled(True) self.label_item_lote_vazio.setText('Sim') self.ativar_botoes() else: dialog = StatusDialog( status='ALERTA' , exception=retorno , mensagem='Não foi possível esvaziar o insumo.' , parent=self ) dialog.exec()
def alterar_senha(self): sql = '''ALTER ROLE {username} PASSWORD '{password}';'''\ .format(username=self.lineEdit_username.text() , password=self.lineEdit_password.text()) retorno = self.db.execute_sql(sql, as_dict=False) if retorno[0]: dialog = StatusDialog(status='OK', mensagem='Senha alterada com sucesso!') else: dialog = StatusDialog( status='ALERTA', mensagem='Não foi possível editar o usuário.', exception=str(retorno)) logging.debug('[CadastroUsuario] Retorno alteração senha: ' + str(retorno)) dialog.exec()
def excluir(self, validar=True): self.dados = { "metodo": "prc_delete_mercadoria", "schema": "soad", "params": { "mercadoria_id": self.lineEdit_id.text() } } retorno = super(CadastroMercadoria, self).excluir() if retorno[0]: dialog = StatusDialog(status='OK' , mensagem='Mercadoria excluída com sucesso.' , parent=self.parent_window) self.limpar_dados() else: dialog = StatusDialog(status='ALERTA' , mensagem='Não foi possível excluir a mercadoria.' , exception=retorno , parent=self.parent_window) dialog.exec()
def get_tipo_relatorio(self, tipo): tipo = tipo.upper() relatorio = None if tipo == 'VENDA': from Controller.CadastroPedido import CadastroPedido from Controller.Componentes.ListaPadrao.Filtro.FiltrosLista.FiltroPedido import FiltroPedido relatorio = { "descricao": "Lista de pedidos de venda", "tabela": 'vw_pedido_venda', "colunas": { "id_pedido": ("Número", 'ID'), "situacao": ("Situação", str), "data_cadastro": ("Data do Pedido", datetime), "data_entrega": ("Data para Entrega", datetime), "quantidade_mercadorias": ("Quantidade de mercadorias", int), "valor_total_mercadorias": ("Total das mercadorias", float), "quantidade_remanufaturas": ("Quantidade de remanufaturas", int), "valor_total_remanufaturas": ("Total das remanufaturas", float), "valor_total_pedido": ("Total do pedido", float), "pessoa": ("Cliente", str), "documento": ("Documento", str), "inscricao_estadual": ("Inscrição Estadual", str), "fantasia": ("Nome Fantasia", str), "email": ("Email", str), "telefone": ("Telefone", str), "observacao": ("Observações", str), }, "interface": (CadastroPedido, { 'tipo': tipo }), "filtro": (FiltroPedido, { 'tipo': tipo }), "relatorio": { "id_pedido": "Pedido", "data_cadastro": "Data do Pedido", "situacao": "Situação", "documento": "Doc. Cliente", "pessoa": "Cliente", "quantidade_mercadorias": "Mercadorias", "valor_total_mercadorias": "V. Total das mercadorias", "quantidade_remanufaturas": "Remanufaturas", "valor_total_remanufaturas": "V. Total das remanufaturas", "valor_total_pedido": "V. Total do pedido", "data_entrega": "Data para Entrega" }, "sort_column_relatorio": ["Data do Pedido", "Pedido", "Doc. Cliente", "Situação"], "totalizadores": [ "V. Total do pedido", "V. Total das mercadorias", "V. Total das remanufaturas" ] } if tipo == 'COMPRA': from Controller.CadastroPedido import CadastroPedido from Controller.Componentes.ListaPadrao.Filtro.FiltrosLista.FiltroPedido import FiltroPedido relatorio = { "descricao": "Lista de pedidos de compra", "tabela": 'vw_pedido_compra', "colunas": { "id_pedido": ("Número", 'ID'), "situacao": ("Situação", str), "data_cadastro": ("Data do Pedido", datetime), "data_entrega": ("Data para Entrega", datetime), "quantidade_mercadorias": ("Quantidade de mercadorias", int), "valor_total_mercadorias": ("Valor Total", float), "valor_total_pedido": ("Total do pedido", float), "pessoa": ("Fornecedor", str), "documento": ("Documento", str), "inscricao_estadual": ("Inscrição Estadual", str), "fantasia": ("Nome Fantasia", str), "email": ("Email", str), "telefone": ("Telefone", str), "observacao": ("Observações", str), }, "interface": (CadastroPedido, { 'tipo': tipo }), "filtro": (FiltroPedido, { 'tipo': tipo }), "relatorio": { "id_pedido": "Pedido", "situacao": "Situação", "data_cadastro": "Data do Pedido", "documento": "Doc. Fornecedor", "pessoa": "Fornecedor", "quantidade_mercadorias": "Quantidade de mercadorias", "valor_total_mercadorias": "V. Total das mercadorias", "valor_total_pedido": "V. Total do pedido", "data_entrega": "Data para Entrega" }, "sort_column_relatorio": ["Data do Pedido", "Pedido", "Doc. Fornecedor", "Situação"], "totalizadores": ["V. Total do pedido"] } if tipo == 'ITEM_ESTOQUE': from Controller.Componentes.ListaPadrao.Filtro.FiltrosLista.FiltroEstoque import FiltroEstoque from Controller.DescarteItem import DescarteItem relatorio = { "descricao": "Lista de itens em estoque", "tabela": 'vw_item_lote', "colunas": { "id_lote": ("Lote", 'ID'), "id_item_lote": ("Item", 'ID'), "valor_unitario": ("Valor unitário", float), "quantidade_item": ("Quantidade", float), "data_validade": ("Data validade", datetime), "lote_fabricante": ("Lote do fabricante", str), "id_mercadoria": ("ID Mercadoria", 'ID', False), "codigo_mercadoria": ("Código mercadoria", str), "descricao": ("Mercadoria", str), "marca": ("Fabricante", str), "tipo_mercadoria": ("Classificação", str), "unidade_medida": ("Unidade Medida", str), "data_cadastro": ("Data entrada", datetime), "id_pedido_entrada": ("Número da Compra", 'ID'), "nome_pessoa_entrada": ("Fornecedor", str), "documento_pessoa_entrada": ("CNPJ Fornecedor", str), "data_retirada": ("Data saída", datetime), "id_pedido_saida": ("Número Venda", 'ID'), "motivo_retirada": ("Motivo saída", str), "aberto": ("Item aberto", bool), "data_abertura": ("Data Abertura", datetime), "motivo_abertura": ("Motivo Abertura", str), "observacao": ("Observação", str) }, "interface": None, "filtro": FiltroEstoque, "relatorio": { "id_lote": "Lote", "codigo_mercadoria": "Cód.", "descricao": "Mercadoria", "marca": "Fabricante", "tipo_mercadoria": "Classificação", "quantidade_item": "Quantidade", "data_validade": "Validade", "documento_pessoa_entrada": "Doc. Fornecedor", "nome_pessoa_entrada": "Fornecedor", "data_cadastro": "Data Entrada", "data_retirada": "Data Saída" }, "sort_column_relatorio": ["Mercadoria", "Fabricante", "Data Entrada", "Data Saída"], "botao_extra": [{ "nome": "Descartar", "icone": os.path.join('Resources', 'icons', 'delete.png'), "tooltip": "Realiza o descarte dos itens selecionados.", "acao": (DescarteItem, ) }] } if tipo == 'ESTOQUE': from Controller.CadastroMercadoria import CadastroMercadoria from Controller.Componentes.ListaPadrao.Filtro.FiltrosLista.FiltroEstoqueConsolidado import FiltroEstoqueConsolidado relatorio = { "descricao": 'Lista de Estoque', "metodo": 'fnc_gerar_relatorio_estoque', "colunas": { "id_mercadoria": ("ID", 'ID', False), "tipo_mercadoria": ("Classificação", str), "quantidade_estoque": ("Quantidade", float), "codigo_mercadoria": ("Cód.", str), "descricao": ("Mercadoria", str), "marca": ("Fabricante", str), "ativo": ("Ativo", bool), "permite_venda": ("Permite venda", bool), "valor_venda": ("Valor venda", float) }, "interface": CadastroMercadoria, "filtro": FiltroEstoqueConsolidado, "relatorio": { "codigo_mercadoria": "Cód.", "descricao": "Mercadoria", "marca": "Fabricante", "tipo_mercadoria": "Classificação", "quantidade_estoque": "Quantidade", "ativo": "Ativo", "permite_venda": "Permite venda", "valor_venda": "Valor venda" }, "sort_column_relatorio": [ "Mercadoria", "Fabricante", "Classificação", "Quantidade", "Ativo" ] } if tipo == 'REMANUFATURA': from Controller.RegistroRemanufatura import RegistroRemanufatura from Controller.Componentes.ListaPadrao.Filtro.FiltrosLista.FiltroRemanufatura import FiltroRemanufatura relatorio = { "descricao": "Lista de remanufaturas", "tabela": "vw_remanufatura", "colunas": { "id_remanufatura": ("Remanufatura", 'ID', False), "codigo": ("Código da remanufatura", str), "data_cadastro": ("Data cadastro", datetime), "data_realizada": ("Data realizada", datetime), "situacao_remanufatura": ("Situação da remanufatura", str), "casco": ("Casco", str), "insumo": ("Insumo", str), "id_item_lote": ("Item lote do insumo", 'ID'), "colorido": ("Colorido", bool), "valor_unitario": ("Valor", float), "id_pedido": ("Pedido", 'ID'), "situacao_pedido": ("Situação do pedido", str), "pessoa": ("Cliente", str), "documento": ("CPF/CNPJ Cliente", str) }, "interface": RegistroRemanufatura, "filtro": FiltroRemanufatura, "relatorio": { "casco": "Casco", "insumo": "Insumo", "data_cadastro": "Data cadastro", "data_realizada": "Data realizada", "situacao_remanufatura": "Situação", "codigo": "Código", "colorido": "Colorido", "valor_unitario": "Valor (R$)" }, "sort_column_relatorio": ["Casco", "Insumo", "Situação", "Código"] } if tipo == 'MERCADORIA': from Controller.CadastroMercadoria import CadastroMercadoria relatorio = { "descricao": "Lista de mercadorias", "tabela": 'vw_mercadoria', "colunas": { "id_mercadoria": ("ID Mercadoria", 'ID', False), "codigo": ("Código mercadoria", str), "tipo_mercadoria": ("Classificação", str), "descricao": ("Descrição", str), "marca": ("Fabricante", str), "data_cadastro": ("Data cadastro", datetime), "ativo": ("Ativo", bool), "permite_venda": ("Permite venda", bool), "valor_venda": ("Valor de venda", float), "quantidade_embalagem": ("Quantidade embalagem", float), "abreviacao": ("Unidade medida embalagem", str), "colorido": ("Colorido", bool), "quantidade_insumo": ("Quantidade insumo", float), "unidade_medida_insumo": ("Unidade de medida casco", str), "insumo_casco": ("Insumo casco", str) }, "interface": CadastroMercadoria, "filtro": None, "relatorio": { "codigo": "Código", "tipo_mercadoria": "Classificação", "marca": "Fabricante", "descricao": "Mercadoria", "valor_venda": "Valor", "quantidade_embalagem": "Embalagem", "abreviacao": "Un. Medida" }, "sort_column_relatorio": ["Classificação", "Mercadoria", "Fabricante", "Valor"] } if tipo == 'CLIENTE': from Controller.CadastroPessoa import CadastroPessoa relatorio = { "descricao": "Lista de clientes", "tabela": "vw_pessoa_cliente", "colunas": { "id_pessoa": ("ID", 'ID', False), "nome": ("Nome", str), "documento": ("CPF/CNPJ", str), "fantasia": ("Nome Fantasia", str), "email": ("Email", str), "telefone": ("Telefone", str), "inscricao_estadual": ("Inscrição Estadual", str), "municipio": ("Município", str), "sigla_uf": ("UF", str), "logradouro": ("Logradouro", str), "bairro": ("Bairro", str), "numero": ("Número", str), "cep": ("CEP", str), "complemento": ("Complemento", str), "tipo_endereco": ("Tipo de endereço", str), "pais": ("País", str) }, "interface": CadastroPessoa, "filtro": None, "relatorio": { "documento": "Documento", "nome": "Nome/Razão Social", "fantasia": "Nome Fantasia", "telefone": "Telefone", "email": "E-Mail", "municipio": "Município", "sigla_uf": "UF" }, "sort_column_relatorio": ["Nome/Razão Social", "Nome Fantasia", "Documento"] } if tipo == 'FORNECEDOR': from Controller.CadastroPessoa import CadastroPessoa relatorio = { "descricao": "Lista de fornecedores", "tabela": "vw_pessoa_fornecedor", "colunas": { "id_pessoa": ("ID", 'ID', False), "nome": ("Nome", str), "documento": ("CPF/CNPJ", str), "fantasia": ("Nome Fantasia", str), "email": ("Email", str), "telefone": ("Telefone", str), "inscricao_estadual": ("Inscrição Estadual", str), "municipio": ("Município", str), "sigla_uf": ("UF", str), "logradouro": ("Logradouro", str), "bairro": ("Bairro", str), "numero": ("Número", str), "cep": ("CEP", str), "complemento": ("Complemento", str), "tipo_endereco": ("Tipo de endereço", str), "pais": ("País", str) }, "interface": CadastroPessoa, "filtro": None, "relatorio": { "documento": "Documento", "nome": "Nome/Razão Social", "fantasia": "Nome Fantasia", "telefone": "Telefone", "email": "E-Mail", "municipio": "Município", "sigla_uf": "UF" }, "sort_column_relatorio": ["Nome/Razão Social", "Nome Fantasia", "Documento"] } if tipo == 'INVENTARIO': relatorio = { "descricao": "Lista de lançamentos manuais", "tabela": "vw_auditoria_inventario", "colunas": { "id_ajuste": ("ID", 'ID', False), "operacao": ("Operação", str), "quantidade": ("Quantidade", float), "usuario": ("Usuário", str), "data_ajuste": ("Data", datetime), "codigo": ("Código Mercadoria", str), "descricao": ("Mercadoria", str), "marca": ("Fabricante", str) }, "interface": None, "filtro": None, "relatorio": { "operacao": "Operação", "quantidade": "Quantidade", "usuario": "Usuário", "data_ajuste": "Data", "codigo": "Código Mercadoria", "descricao": "Mercadoria", "marca": "Fabricante" }, "sort_column_relatorio": ["Data", "Operação", "Mercadoria"] } if not relatorio: dialog = StatusDialog(status='ERRO', mensagem="O tipo de relatório " + tipo + " não é válido.") dialog.exec() return relatorio