示例#1
0
    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()
示例#2
0
    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()
示例#3
0
    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()
示例#4
0
    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()
示例#6
0
 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
示例#7
0
    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()
示例#8
0
 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()
示例#9
0
    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)
示例#10
0
    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]
示例#11
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"
示例#12
0
    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)
示例#13
0
    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()
示例#14
0
    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()
示例#15
0
 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'
示例#16
0
    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()
示例#17
0
    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()
示例#18
0
    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()
示例#19
0
    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()
示例#20
0
    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())
            )
示例#21
0
    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()
示例#22
0
    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]
示例#23
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()
示例#24
0
    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()
示例#25
0
    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
示例#26
0
    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()
示例#27
0
    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()
示例#28
0
    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()
示例#29
0
    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()
示例#30
0
    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