def Selecionar(self, sequencia_arq_rec_convenio):
        banco_dados.Conectar()

        try:
            variaveis_bind = {
                'sequencia_arq_rec_convenio': sequencia_arq_rec_convenio
            }
            comando_sql = '''SELECT ARC.CODIGO_DA_FILIAL
                             ,      ARC.NSU_DA_TRANSACAO
                             FROM   MTZ_ARQS_RECEITAS_CONVENIOS ARC
                             WHERE  ARC.SEQUENCIA_ARQ_REC_CONVENIO = :sequencia_arq_rec_convenio'''
            banco_dados.Executar(comando_sql, variaveis_bind)
            dados_arquivo = banco_dados.BuscarUm()

            if dados_arquivo != None:
                self.codigo_filial = dados_arquivo[0]
                self.nsu_transacao = dados_arquivo[1]

                status_processamento = banco_dados.ExecutarFuncao(
                    'PCK_MTZ_ARQS_RECS_CONVENIOS.FNC_PROCESSA_ARQUIVO', 'CHAR',
                    [sequencia_arq_rec_convenio])
                banco_dados.Comitar()

                if status_processamento == 'A':
                    return True

                else:
                    comando_sql = '''SELECT ARC.LOG_PROCESSAMENTO
                                     FROM   MTZ_ARQS_RECEITAS_CONVENIOS ARC
                                     WHERE  ARC.SEQUENCIA_ARQ_REC_CONVENIO = :sequencia_arq_rec_convenio'''
                    banco_dados.Executar(comando_sql, variaveis_bind)
                    dados_arquivo = banco_dados.BuscarUm()
                    raise Exception(str(dados_arquivo[0]))

            else:
                return False

            return True

        except Exception as e:
            raise

        finally:
            banco_dados.Desconectar()
示例#2
0
    def Processar(self):
        banco_dados.Conectar()

        try:
            arquivo_excel = xlrd.open_workbook(file_contents=self.blob_arquivo)
            planilha_excel = arquivo_excel.sheet_by_index(0)

            for numero_linha in range(1, planilha_excel.nrows):
                variaveis_bind_planilha = {
                    'numero_carta_remessa':
                    planilha_excel.cell(numero_linha, 0).value,
                    'numero_guia':
                    planilha_excel.cell(numero_linha, 1).value,
                    'numero_autorizacao':
                    planilha_excel.cell(numero_linha, 2).value,
                    'numero_cupom_fiscal':
                    planilha_excel.cell(numero_linha, 6).value,
                    'data_atendimento':
                    str(
                        datetime.datetime(*xlrd.xldate_as_tuple(
                            planilha_excel.cell(numero_linha, 7).value,
                            arquivo_excel.datemode))),
                    'ean_enviado':
                    planilha_excel.cell(numero_linha, 10).value,
                    'valor_apresentado':
                    planilha_excel.cell(numero_linha, 13).value
                }

                comando_sql = 'SELECT RF.SEQ_RETORNO_FINANCEIRO \
                               FROM   CAS_RETORNOS_FINANCEIROS RF \
                               WHERE  RF.NUM_CARTA_REMESSA  = :numero_carta_remessa \
                               AND    RF.NUMERO_GUIA        = :numero_guia \
                               AND    RF.NUMERO_AUTORIZACAO = :numero_autorizacao \
                               AND    RF.NUMERO_CUPOM_SAIDA = :numero_cupom_fiscal \
                               AND    RF.DATA_ATENDIMENTO   = TRUNC(TO_DATE(:data_atendimento,\'YYYY-MM-DD HH24:MI:SS\')) \
                               AND    RF.CODIGO_EAN_ENVIADO = :ean_enviado \
                               AND    RF.VALOR_APRESENTADO  = :valor_apresentado'

                banco_dados.Executar(comando_sql, variaveis_bind_planilha)
                retorno_financeiro = banco_dados.BuscarUm()

                if retorno_financeiro == None:
                    variaveis_bind_log = variaveis_bind_planilha
                    variaveis_bind_log.update({
                        'sequencia_arquivo':
                        self.sequencia_arquivo,
                        'numero_linha':
                        numero_linha,
                        'status_log_processamento':
                        'E',
                        'log_processamento':
                        u'Não foi possível encontrar glosa equivalente aos parâmetros do arquivo de recursos!'
                    })
                    comando_sql = 'INSERT INTO CAS_LOG_PROC_ARQ_REC_GLOSAS(SEQUENCIA_ARQUIVO \
                                   ,                                       NUMERO_LINHA \
                                   ,                                       NUMERO_CARTA_REMESSA \
                                   ,                                       NUMERO_GUIA \
                                   ,                                       NUMERO_AUTORIZACAO \
                                   ,                                       NUMERO_CUPOM_FISCAL \
                                   ,                                       DATA_ATENDIMENTO \
                                   ,                                       CODIGO_EAN_ENVIADO \
                                   ,                                       VALOR_APRESENTADO \
                                   ,                                       STATUS_LOG_PROCESSAMENTO \
                                   ,                                       LOG_PROCESSAMENTO) \
                                   VALUES                                 (:sequencia_arquivo \
                                   ,                                       :numero_linha \
                                   ,                                       :numero_carta_remessa \
                                   ,                                       :numero_guia \
                                   ,                                       :numero_autorizacao \
                                   ,                                       :numero_cupom_fiscal \
                                   ,                                       TRUNC(TO_DATE(:data_atendimento,\'YYYY-MM-DD HH24:MI:SS\')) \
                                   ,                                       :ean_enviado \
                                   ,                                       :valor_apresentado \
                                   ,                                       :status_log_processamento \
                                   ,                                       :log_processamento)'

                    banco_dados.Executar(comando_sql, variaveis_bind_log)

                else:
                    variaveis_bind_recurso = {
                        'seq_retorno_financeiro': retorno_financeiro[0]
                    }
                    comando_sql = 'SELECT RG.SEQ_RECURSO_GLOSA \
                                   ,      RG.DESCRICAO_RECURSO \
                                   ,      RG.STATUS_RECURSO \
                                   FROM   CAS_RECURSOS_GLOSAS RG \
                                   WHERE  RG.SEQ_RETORNO_FINANCEIRO = :seq_retorno_financeiro \
                                   AND    RG.STATUS_RECURSO         <> \'E\''

                    banco_dados.Executar(comando_sql, variaveis_bind_recurso)
                    recurso_glosa = banco_dados.BuscarUm()

                    if recurso_glosa == None:
                        if planilha_excel.cell(numero_linha, 24).value in [
                                'Sim', 'SIM', 'S', 's'
                        ]:
                            variaveis_bind_recurso.update({
                                'dthr_solicitacao_recurso':
                                self.dthr_importacao_arquivo,
                                'usuario_solicitacao_recurso':
                                self.usuario_importacao_arquivo,
                                'descricao_recurso':
                                planilha_excel.cell(numero_linha, 25).value,
                                'status_recurso':
                                'P'
                            })
                            comando_sql = 'INSERT INTO CAS_RECURSOS_GLOSAS(SEQ_RETORNO_FINANCEIRO \
                                           ,                               DTHR_SOLICITACAO_RECURSO \
                                           ,                               USUARIO_SOLICITACAO_RECURSO \
                                           ,                               DESCRICAO_RECURSO \
                                           ,                               STATUS_RECURSO) \
                                           VALUES                         (:seq_retorno_financeiro \
                                           ,                               :dthr_solicitacao_recurso \
                                           ,                               :usuario_solicitacao_recurso \
                                           ,                               :descricao_recurso \
                                           ,                               :status_recurso)'

                            banco_dados.Executar(comando_sql,
                                                 variaveis_bind_recurso)

                            variaveis_bind_log = variaveis_bind_planilha
                            variaveis_bind_log.update({
                                'sequencia_arquivo':
                                self.sequencia_arquivo,
                                'numero_linha':
                                numero_linha,
                                'status_log_processamento':
                                'I',
                                'log_processamento':
                                u'Incluída nova solicitação de recurso!'
                            })
                            comando_sql = 'INSERT INTO CAS_LOG_PROC_ARQ_REC_GLOSAS(SEQUENCIA_ARQUIVO \
                                           ,                                       NUMERO_LINHA \
                                           ,                                       NUMERO_CARTA_REMESSA \
                                           ,                                       NUMERO_GUIA \
                                           ,                                       NUMERO_AUTORIZACAO \
                                           ,                                       NUMERO_CUPOM_FISCAL \
                                           ,                                       DATA_ATENDIMENTO \
                                           ,                                       CODIGO_EAN_ENVIADO \
                                           ,                                       VALOR_APRESENTADO \
                                           ,                                       STATUS_LOG_PROCESSAMENTO \
                                           ,                                       LOG_PROCESSAMENTO) \
                                           VALUES                                 (:sequencia_arquivo \
                                           ,                                       :numero_linha \
                                           ,                                       :numero_carta_remessa \
                                           ,                                       :numero_guia \
                                           ,                                       :numero_autorizacao \
                                           ,                                       :numero_cupom_fiscal \
                                           ,                                       TRUNC(TO_DATE(:data_atendimento,\'YYYY-MM-DD HH24:MI:SS\')) \
                                           ,                                       :ean_enviado \
                                           ,                                       :valor_apresentado \
                                           ,                                       :status_log_processamento \
                                           ,                                       :log_processamento)'

                            banco_dados.Executar(comando_sql,
                                                 variaveis_bind_log)

                    else:
                        if planilha_excel.cell(numero_linha, 24).value in [
                                'Sim', 'SIM', 'S', 's'
                        ]:
                            if recurso_glosa[1].decode(
                                    'iso-8859-1') != planilha_excel.cell(
                                        numero_linha, 25).value:
                                if recurso_glosa[2] == 'P':
                                    variaveis_bind_recurso.update({
                                        'seq_recurso_glosa':
                                        recurso_glosa[0],
                                        'dthr_solicitacao_recurso':
                                        self.dthr_importacao_arquivo,
                                        'usuario_solicitacao_recurso':
                                        self.usuario_importacao_arquivo,
                                        'descricao_recurso':
                                        planilha_excel.cell(numero_linha,
                                                            25).value,
                                        'status_recurso':
                                        'P'
                                    })
                                    comando_sql = 'UPDATE CAS_RECURSOS_GLOSAS RG \
                                                   SET    RG.DTHR_SOLICITACAO_RECURSO    = :dthr_solicitacao_recurso \
                                                   ,      RG.USUARIO_SOLICITACAO_RECURSO = :usuario_solicitacao_recurso \
                                                   ,      RG.DESCRICAO_RECURSO           = :descricao_recurso \
                                                   WHERE  RG.SEQ_RETORNO_FINANCEIRO      = :seq_retorno_financeiro \
                                                   AND    RG.SEQ_RECURSO_GLOSA           = :seq_recurso_glosa \
                                                   AND    RG.STATUS_RECURSO              = :status_recurso'

                                    banco_dados.Executar(
                                        comando_sql, variaveis_bind_recurso)

                                    variaveis_bind_log = variaveis_bind_planilha
                                    variaveis_bind_log.update({
                                        'sequencia_arquivo':
                                        self.sequencia_arquivo,
                                        'numero_linha':
                                        numero_linha,
                                        'status_log_processamento':
                                        'I',
                                        'log_processamento':
                                        u'Encontrado solicitação de recurso pendente de processamento. Motivo recurso atualizado!!'
                                    })
                                    comando_sql = 'INSERT INTO CAS_LOG_PROC_ARQ_REC_GLOSAS(SEQUENCIA_ARQUIVO \
                                                   ,                                       NUMERO_LINHA \
                                                   ,                                       NUMERO_CARTA_REMESSA \
                                                   ,                                       NUMERO_GUIA \
                                                   ,                                       NUMERO_AUTORIZACAO \
                                                   ,                                       NUMERO_CUPOM_FISCAL \
                                                   ,                                       DATA_ATENDIMENTO \
                                                   ,                                       CODIGO_EAN_ENVIADO \
                                                   ,                                       VALOR_APRESENTADO \
                                                   ,                                       STATUS_LOG_PROCESSAMENTO \
                                                   ,                                       LOG_PROCESSAMENTO) \
                                                   VALUES                                 (:sequencia_arquivo \
                                                   ,                                       :numero_linha \
                                                   ,                                       :numero_carta_remessa \
                                                   ,                                       :numero_guia \
                                                   ,                                       :numero_autorizacao \
                                                   ,                                       :numero_cupom_fiscal \
                                                   ,                                       TRUNC(TO_DATE(:data_atendimento,\'YYYY-MM-DD HH24:MI:SS\')) \
                                                   ,                                       :ean_enviado \
                                                   ,                                       :valor_apresentado \
                                                   ,                                       :status_log_processamento \
                                                   ,                                       :log_processamento)'

                                    banco_dados.Executar(
                                        comando_sql, variaveis_bind_log)

                                else:
                                    variaveis_bind_log = variaveis_bind_planilha
                                    variaveis_bind_log.update({
                                        'sequencia_arquivo':
                                        self.sequencia_arquivo,
                                        'numero_linha':
                                        numero_linha,
                                        'status_log_processamento':
                                        'A',
                                        'log_processamento':
                                        u'Encontrado solicitação de recurso já processada e finalizada. Nova solicitação não permitida!'
                                    })
                                    comando_sql = 'INSERT INTO CAS_LOG_PROC_ARQ_REC_GLOSAS(SEQUENCIA_ARQUIVO \
                                                   ,                                       NUMERO_LINHA \
                                                   ,                                       NUMERO_CARTA_REMESSA \
                                                   ,                                       NUMERO_GUIA \
                                                   ,                                       NUMERO_AUTORIZACAO \
                                                   ,                                       NUMERO_CUPOM_FISCAL \
                                                   ,                                       DATA_ATENDIMENTO \
                                                   ,                                       CODIGO_EAN_ENVIADO \
                                                   ,                                       VALOR_APRESENTADO \
                                                   ,                                       STATUS_LOG_PROCESSAMENTO \
                                                   ,                                       LOG_PROCESSAMENTO) \
                                                   VALUES                                 (:sequencia_arquivo \
                                                   ,                                       :numero_linha \
                                                   ,                                       :numero_carta_remessa \
                                                   ,                                       :numero_guia \
                                                   ,                                       :numero_autorizacao \
                                                   ,                                       :numero_cupom_fiscal \
                                                   ,                                       TRUNC(TO_DATE(:data_atendimento,\'YYYY-MM-DD HH24:MI:SS\')) \
                                                   ,                                       :ean_enviado \
                                                   ,                                       :valor_apresentado \
                                                   ,                                       :status_log_processamento \
                                                   ,                                       :log_processamento)'

                                    banco_dados.Executar(
                                        comando_sql, variaveis_bind_log)

                        else:
                            if recurso_glosa[2] == 'P':
                                variaveis_bind_recurso.update(
                                    {'seq_recurso_glosa': recurso_glosa[0]})
                                comando_sql = 'DELETE \
                                               FROM   CAS_RECURSOS_GLOSAS RG \
                                               WHERE  RG.SEQ_RETORNO_FINANCEIRO = :seq_retorno_financeiro \
                                               AND    RG.SEQ_RECURSO_GLOSA      = :seq_recurso_glosa'

                                banco_dados.Executar(comando_sql,
                                                     variaveis_bind_recurso)

                                variaveis_bind_log = variaveis_bind_planilha
                                variaveis_bind_log.update({
                                    'sequencia_arquivo':
                                    self.sequencia_arquivo,
                                    'numero_linha':
                                    numero_linha,
                                    'status_log_processamento':
                                    'A',
                                    'log_processamento':
                                    u'Excluída a solicitação de recurso!'
                                })
                                comando_sql = 'INSERT INTO CAS_LOG_PROC_ARQ_REC_GLOSAS(SEQUENCIA_ARQUIVO \
                                               ,                                       NUMERO_LINHA \
                                               ,                                       NUMERO_CARTA_REMESSA \
                                               ,                                       NUMERO_GUIA \
                                               ,                                       NUMERO_AUTORIZACAO \
                                               ,                                       NUMERO_CUPOM_FISCAL \
                                               ,                                       DATA_ATENDIMENTO \
                                               ,                                       CODIGO_EAN_ENVIADO \
                                               ,                                       VALOR_APRESENTADO \
                                               ,                                       STATUS_LOG_PROCESSAMENTO \
                                               ,                                       LOG_PROCESSAMENTO) \
                                               VALUES                                 (:sequencia_arquivo \
                                               ,                                       :numero_linha \
                                               ,                                       :numero_carta_remessa \
                                               ,                                       :numero_guia \
                                               ,                                       :numero_autorizacao \
                                               ,                                       :numero_cupom_fiscal \
                                               ,                                       TRUNC(TO_DATE(:data_atendimento,\'YYYY-MM-DD HH24:MI:SS\')) \
                                               ,                                       :ean_enviado \
                                               ,                                       :valor_apresentado \
                                               ,                                       :status_log_processamento \
                                               ,                                       :log_processamento)'

                                banco_dados.Executar(comando_sql,
                                                     variaveis_bind_log)

                            else:
                                variaveis_bind_log = variaveis_bind_planilha
                                variaveis_bind_log.update({
                                    'sequencia_arquivo':
                                    self.sequencia_arquivo,
                                    'numero_linha':
                                    numero_linha,
                                    'status_log_processamento':
                                    'E',
                                    'log_processamento':
                                    u'Encontrado solicitação de recurso já processada e finalizada. Exclusão não permitida!'
                                })
                                comando_sql = 'INSERT INTO CAS_LOG_PROC_ARQ_REC_GLOSAS(SEQUENCIA_ARQUIVO \
                                               ,                                       NUMERO_LINHA \
                                               ,                                       NUMERO_CARTA_REMESSA \
                                               ,                                       NUMERO_GUIA \
                                               ,                                       NUMERO_AUTORIZACAO \
                                               ,                                       NUMERO_CUPOM_FISCAL \
                                               ,                                       DATA_ATENDIMENTO \
                                               ,                                       CODIGO_EAN_ENVIADO \
                                               ,                                       VALOR_APRESENTADO \
                                               ,                                       STATUS_LOG_PROCESSAMENTO \
                                               ,                                       LOG_PROCESSAMENTO) \
                                               VALUES                                 (:sequencia_arquivo \
                                               ,                                       :numero_linha \
                                               ,                                       :numero_carta_remessa \
                                               ,                                       :numero_guia \
                                               ,                                       :numero_autorizacao \
                                               ,                                       :numero_cupom_fiscal \
                                               ,                                       TRUNC(TO_DATE(:data_atendimento,\'YYYY-MM-DD HH24:MI:SS\')) \
                                               ,                                       :ean_enviado \
                                               ,                                       :valor_apresentado \
                                               ,                                       :status_log_processamento \
                                               ,                                       :log_processamento)'

                                banco_dados.Executar(comando_sql,
                                                     variaveis_bind_log)

            banco_dados.Comitar()

        except Exception as e:
            raise

        finally:
            banco_dados.Desconectar()
    def Processar(self, validar_codigo_barras=False):
        if len(self.codigo_barras) != 12 and validar_codigo_barras == True:
            return False

        banco_dados.Conectar()

        try:
            if validar_codigo_barras == True:
                variaveis_bind = {'codigo_barras': self.codigo_barras}
                comando_sql = '''WITH DADOS AS
                                  (SELECT /*+ MATERIALIZE */
                                          FNC_COR_DECODE_BASE61(SUBSTR(:codigo_barras, 1, 3)) CODIGO_DA_FILIAL
                                         ,FNC_COR_DECODE_BASE61(SUBSTR(:codigo_barras, -9)) NSU_DA_TRANSACAO
                                     FROM DUAL)
                                 SELECT D.CODIGO_DA_FILIAL
                                       ,D.NSU_DA_TRANSACAO
                                   FROM DADOS                D
                                       ,MTZ_VENDAS_DE_CARTAO VC
                                  WHERE VC.CODIGO_DA_FILIAL = D.CODIGO_DA_FILIAL
                                    AND VC.NSU_DA_TRANSACAO = D.NSU_DA_TRANSACAO'''
                banco_dados.Executar(comando_sql, variaveis_bind)
                dados_transacao = banco_dados.BuscarUm()

                if dados_transacao != None:
                    self.codigo_filial = dados_transacao[0]
                    self.nsu_transacao = dados_transacao[1]
                else:
                    return False

            blob_arquivo = open(self.nome_arquivo_pdf, 'rb')
            thumbnail_arquivo = open(self.nome_arquivo_thumbnail, 'rb')

            variaveis_bind = {
                'blob_arquivo': blob_arquivo,
                'nome_arquivo': os.path.basename(self.nome_arquivo_pdf),
                'thumbnail_arquivo': thumbnail_arquivo,
                'codigo_barras_arquivo': self.codigo_barras,
                'codigo_da_filial': self.codigo_filial,
                'nsu_da_transacao': self.nsu_transacao,
                'sequencia_arq_rec_convenio': None
            }
            comando_sql = '''INSERT INTO MTZ_ARQS_RECEITAS_CONVENIOS(BLOB_ARQUIVO
                                                                    ,NOME_ARQUIVO
                                                                    ,MIMETYPE_ARQUIVO
                                                                    ,THUMBNAIL_ARQUIVO
                                                                    ,CODIGO_BARRAS_ARQUIVO
                                                                    ,CODIGO_DA_FILIAL
                                                                    ,NSU_DA_TRANSACAO
                                                                    ,DTHR_RECEBIMENTO)
                                                              VALUES(:blob_arquivo
                                                                    ,:nome_arquivo
                                                                    ,'application/pdf'
                                                                    ,:thumbnail_arquivo
                                                                    ,SUBSTR(:codigo_barras_arquivo,1,200)
                                                                    ,:codigo_da_filial
                                                                    ,:nsu_da_transacao
                                                                    ,SYSDATE)
                                    RETURNING SEQUENCIA_ARQ_REC_CONVENIO INTO :sequencia_arq_rec_convenio'''
            sequencia_arq_rec_convenio = banco_dados.ExecutarComRetorno(
                comando_sql, variaveis_bind, 'sequencia_arq_rec_convenio',
                'NUMBER')

            blob_arquivo.close()
            thumbnail_arquivo.close()

            del (blob_arquivo)
            del (thumbnail_arquivo)

            del (variaveis_bind)

            status_processamento = banco_dados.ExecutarFuncao(
                'PCK_MTZ_ARQS_RECS_CONVENIOS.FNC_PROCESSA_ARQUIVO', 'CHAR',
                [sequencia_arq_rec_convenio])
            banco_dados.Comitar()

            if status_processamento == 'A':
                if self.Integrar(sequencia_arq_rec_convenio):
                    self.Conciliar(sequencia_arq_rec_convenio)

            return True

        except Exception as e:
            raise

        finally:
            banco_dados.Desconectar()