Exemple #1
0
    def Selecionar(self, sequencia_arquivo):
        banco_dados.Conectar()

        try:
            variaveis_bind = {'sequencia_arquivo': sequencia_arquivo}
            comando_sql = 'SELECT ARG.SEQUENCIA_ARQUIVO \
                           ,      ARG.NOME_ARQUIVO \
                           ,      ARG.MIMETYPE_ARQUIVO \
                           ,      ARG.CHARSET_ARQUIVO \
                           ,      ARG.BLOB_ARQUIVO \
                           ,      ARG.DTHR_IMPORTACAO_ARQUIVO \
                           ,      ARG.USUARIO_IMPORTACAO_ARQUIVO \
                           FROM   CAS_ARQUIVOS_REC_GLOSAS ARG \
                           WHERE  ARG.SEQUENCIA_ARQUIVO             = :sequencia_arquivo \
                           AND    (ARG.STATUS_PROCESSAMENTO_ARQUIVO IS NULL OR \
                                   ARG.STATUS_PROCESSAMENTO_ARQUIVO = \'P\')'

            banco_dados.Executar(comando_sql, variaveis_bind)
            arquivo_recurso = banco_dados.BuscarUm()

            if arquivo_recurso != None:
                self.sequencia_arquivo = arquivo_recurso[0]
                self.nome_arquivo = arquivo_recurso[1]
                self.mimetype_arquivo = arquivo_recurso[2]
                self.charset_arquivo = arquivo_recurso[3]
                self.blob_arquivo = arquivo_recurso[4].read()
                self.dthr_importacao_arquivo = arquivo_recurso[5]
                self.usuario_importacao_arquivo = arquivo_recurso[6]

        except Exception as e:
            logger.error(e, exc_info=True)
            raise

        finally:
            banco_dados.Desconectar()
    def __init__(self):
        banco_dados.Conectar()

        try:
            comando_sql = 'SELECT PR.EMAIL_ADMINISTRADOR \
                           ,      PR.URL_PROXY \
                           ,      PR.USUARIO_PROXY \
                           ,      PR.SENHA_PROXY \
                           ,      PR.URL_LOGIN_SITE_RECURSOS \
                           ,      PR.URL_SITE_RECURSOS \
                           ,      PR.USUARIO_SITE_RECURSOS \
                           ,      PR.SENHA_SITE_RECURSOS \
                           FROM   CAS_PARAMETROS_RECURSOS PR'

            banco_dados.Executar(comando_sql)
            parametros = banco_dados.BuscarUm()

            self.servidor_proxy = str(parametros[1]).rsplit(':', 1)[0]
            self.porta_servidor_proxy = str(parametros[1]).rsplit(':', 1)[1]
            self.usuario_proxy = parametros[2]
            self.senha_usuario_proxy = parametros[3]
            self.url_site_login = parametros[4]
            self.url_site_recurso = parametros[5]
            self.usuario_site = parametros[6]
            self.senha_site = parametros[7]
        except Exception as e:
            raise

        finally:
            banco_dados.Desconectar()
    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()
Exemple #4
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()
Exemple #5
0
    def EfetuarRecursos(self):
        banco_dados.Conectar()

        try:
            comando_sql = 'SELECT DISTINCT RF.NUM_CARTA_REMESSA \
                           FROM   CAS_RECURSOS_GLOSAS RG \
                           ,      CAS_RETORNOS_FINANCEIROS RF \
                           WHERE  RG.SEQ_RETORNO_FINANCEIRO = RF.SEQ_RETORNO_FINANCEIRO \
                           AND    RG.STATUS_RECURSO         = \'P\''

            banco_dados.Executar(comando_sql)
            cartas_remessas = banco_dados.BuscarTodos()

            if len(cartas_remessas) != 0:
                portal_cassi = PortalCassi()

                try:
                    portal_cassi.Inicializar()
                    portal_cassi.Logar()

                    for carta_remessa in cartas_remessas:
                        variaveis_bind = {
                            'numero_carta_remessa': carta_remessa[0]
                        }
                        comando_sql = 'SELECT RF.SEQ_RETORNO_FINANCEIRO \
                                      ,      RG.SEQ_RECURSO_GLOSA \
                                      ,      RF.NUM_CARTA_REMESSA \
                                      ,      RF.NUMERO_CUPOM_SAIDA \
                                      ,      RF.CODIGO_EAN_ENVIADO \
                                      ,      RG.DESCRICAO_RECURSO \
                                      FROM   CAS_RECURSOS_GLOSAS RG \
                                      ,      CAS_RETORNOS_FINANCEIROS RF \
                                      WHERE  RG.SEQ_RETORNO_FINANCEIRO = RF.SEQ_RETORNO_FINANCEIRO \
                                      AND    RG.STATUS_RECURSO         = \'P\' \
                                      AND    RF.NUM_CARTA_REMESSA      = :numero_carta_remessa'

                        banco_dados.Executar(comando_sql, variaveis_bind)
                        recursos_glosas = banco_dados.BuscarTodos()

                        if len(recursos_glosas) != 0:
                            log_carta_remessa = portal_cassi.SelecionarCartaRemessa(
                                numero_carta_remessa=carta_remessa[0])
                            if log_carta_remessa == None:
                                logs_recursos = []
                                for recurso_glosa in recursos_glosas:
                                    log_recurso = portal_cassi.Recursar(
                                        numero_cupom_fiscal=recurso_glosa[3],
                                        ean_enviado=recurso_glosa[4],
                                        descricao_recurso=recurso_glosa[5])

                                    log_recurso.update({
                                        'seq_retorno_financeiro':
                                        recurso_glosa[0],
                                        'seq_recurso_glosa':
                                        recurso_glosa[1]
                                    })

                                    comando_sql = 'UPDATE CAS_RECURSOS_GLOSAS RG \
                                                   SET    RG.DTHR_RECURSO           = SYSDATE \
                                                   ,      RG.STATUS_RECURSO         = :status_recurso \
                                                   ,      RG.LOG_RECURSO            = :log_recurso \
                                                   ,      RG.PRINT_RECURSO          = :print_recurso \
                                                   WHERE  RG.SEQ_RETORNO_FINANCEIRO = :seq_retorno_financeiro \
                                                   AND    RG.SEQ_RECURSO_GLOSA      = :seq_recurso_glosa'

                                    banco_dados.Executar(
                                        comando_sql, log_recurso, True)
                                    logs_recursos.append(log_recurso)

                                if len(logs_recursos) != 0:
                                    log_protocolo = portal_cassi.FinalizarProtocolo(
                                        numero_carta_remessa=carta_remessa[0])

                                    if log_protocolo[
                                            'status_protocolo'] == 'F':
                                        for log_recurso in logs_recursos:
                                            if log_recurso[
                                                    'status_recurso'] == 'F':
                                                variaveis_bind = {
                                                    'numero_protocolo':
                                                    log_protocolo[
                                                        'numero_protocolo'],
                                                    'seq_retorno_financeiro':
                                                    log_recurso[
                                                        'seq_retorno_financeiro'],
                                                    'seq_recurso_glosa':
                                                    log_recurso[
                                                        'seq_recurso_glosa']
                                                }
                                                comando_sql = 'UPDATE CAS_RECURSOS_GLOSAS RG \
                                                               SET    RG.NUMERO_PROTOCOLO_RECURSO = :numero_protocolo \
                                                               WHERE  RG.SEQ_RETORNO_FINANCEIRO   = :seq_retorno_financeiro \
                                                               AND    RG.SEQ_RECURSO_GLOSA        = :seq_recurso_glosa'

                                                banco_dados.Executar(
                                                    comando_sql,
                                                    variaveis_bind, True)

                                    else:
                                        EnviarEmailERRO(
                                            log_protocolo['mensagem_protocolo']
                                        )

                            else:
                                if 'Protocolo prescrito' in log_carta_remessa:
                                    logs_recursos = []
                                    log_recurso = {
                                        'status_recurso': 'E',
                                        'log_recurso': log_carta_remessa,
                                        'print_recurso': None
                                    }
                                    for recurso_glosa in recursos_glosas:
                                        log_recurso.update({
                                            'seq_retorno_financeiro':
                                            recurso_glosa[0],
                                            'seq_recurso_glosa':
                                            recurso_glosa[1]
                                        })

                                        comando_sql = 'UPDATE CAS_RECURSOS_GLOSAS RG \
                                                       SET    RG.DTHR_RECURSO           = SYSDATE \
                                                       ,      RG.STATUS_RECURSO         = :status_recurso \
                                                       ,      RG.LOG_RECURSO            = :log_recurso \
                                                       ,      RG.PRINT_RECURSO          = :print_recurso \
                                                       WHERE  RG.SEQ_RETORNO_FINANCEIRO = :seq_retorno_financeiro \
                                                       AND    RG.SEQ_RECURSO_GLOSA      = :seq_recurso_glosa'

                                        banco_dados.Executar(
                                            comando_sql, log_recurso, True)
                                        logs_recursos.append(log_recurso)

                                EnviarEmailERRO(log_carta_remessa)

                except Exception as e:
                    raise

                finally:
                    portal_cassi.Finalizar()

        except Exception as e:
            raise

        finally:
            banco_dados.Desconectar()
    def Integrar(self, sequencia_arq_rec_convenio):
        banco_dados.Conectar()

        try:
            fluig = Fluig()
            fluig.sequencia_arq_rec_convenio = sequencia_arq_rec_convenio
            if fluig.UploadArquivo():
                variaveis_bind = {
                    'company_id_fluig': fluig.company_id,
                    'document_id_fluig': fluig.document_id,
                    'document_version_fluig': fluig.document_version,
                    'document_description_fluig': fluig.document_description,
                    'document_folder_fluig': fluig.document_folder,
                    'mensagem_retorno_fluig': fluig.mensagem_retorno,
                    'log_processamento':
                    'ARQUIVO DISPONIBILIZADO COM SUCESSO!',
                    'sequencia_arq_rec_convenio':
                    fluig.sequencia_arq_rec_convenio
                }
                comando_sql = '''UPDATE MTZ_ARQS_RECEITAS_CONVENIOS ARC
                                    SET ARC.COMPANY_ID_FLUIG           = :company_id_fluig
                                       ,ARC.DOCUMENT_ID_FLUIG          = :document_id_fluig
                                       ,ARC.DOCUMENT_VERSION_FLUIG     = :document_version_fluig
                                       ,ARC.DOCUMENT_DESCRIPTION_FLUIG = :document_description_fluig
                                       ,ARC.DOCUMENT_FOLDER_FLUIG      = :document_folder_fluig
                                       ,ARC.MENSAGEM_RETORNO_FLUIG     = :mensagem_retorno_fluig
                                       ,ARC.LOG_PROCESSAMENTO          = :log_processamento
                                       ,ARC.DTHR_PROCESSAMENTO         = SYSDATE
                                       ,ARC.STATUS_PROCESSAMENTO       = 'B'
                                  WHERE ARC.SEQUENCIA_ARQ_REC_CONVENIO = :sequencia_arq_rec_convenio'''
                banco_dados.Executar(comando_sql, variaveis_bind, True)

                if fluig.UploadCard():
                    variaveis_bind = {
                        'card_id_fluig':
                        fluig.card_id,
                        'card_version_fluig':
                        fluig.card_version,
                        'card_description_fluig':
                        fluig.card_description,
                        'card_folder_fluig':
                        fluig.card_folder,
                        'mensagem_retorno_fluig':
                        fluig.mensagem_retorno,
                        'log_processamento':
                        'CARD DISPONIBILIZADO COM SUCESSO!',
                        'sequencia_arq_rec_convenio':
                        fluig.sequencia_arq_rec_convenio
                    }
                    comando_sql = '''UPDATE MTZ_ARQS_RECEITAS_CONVENIOS ARC
                                        SET ARC.CARD_ID_FLUIG              = :card_id_fluig
                                           ,ARC.CARD_VERSION_FLUIG         = :card_version_fluig
                                           ,ARC.CARD_DESCRIPTION_FLUIG     = :card_description_fluig
                                           ,ARC.CARD_FOLDER_FLUIG          = :card_folder_fluig
                                           ,ARC.MENSAGEM_RETORNO_FLUIG     = :mensagem_retorno_fluig
                                           ,ARC.LOG_PROCESSAMENTO          = :log_processamento
                                           ,ARC.DTHR_PROCESSAMENTO         = SYSDATE
                                           ,ARC.STATUS_PROCESSAMENTO       = 'F'
                                      WHERE ARC.SEQUENCIA_ARQ_REC_CONVENIO = :sequencia_arq_rec_convenio'''
                    banco_dados.Executar(comando_sql, variaveis_bind, True)
                else:
                    variaveis_bind = {
                        'mensagem_retorno_fluig':
                        fluig.mensagem_retorno,
                        'log_processamento':
                        'DETALHES DO ARQUIVO NAO DISPONIBILIZADOS (ERRO INTEGRACAO FLUIG)!',
                        'sequencia_arq_rec_convenio':
                        fluig.sequencia_arq_rec_convenio
                    }
                    comando_sql = '''UPDATE MTZ_ARQS_RECEITAS_CONVENIOS ARC
                                        SET ARC.MENSAGEM_RETORNO_FLUIG     = :mensagem_retorno_fluig
                                           ,ARC.LOG_PROCESSAMENTO          = :log_processamento
                                           ,ARC.DTHR_PROCESSAMENTO         = SYSDATE
                                           ,ARC.STATUS_PROCESSAMENTO       = 'E'
                                      WHERE ARC.SEQUENCIA_ARQ_REC_CONVENIO = :sequencia_arq_rec_convenio'''
                    banco_dados.Executar(comando_sql, variaveis_bind, True)

                    return False
            else:
                variaveis_bind = {
                    'mensagem_retorno_fluig': fluig.mensagem_retorno,
                    'log_processamento':
                    'ARQUIVO NAO DISPONIBILIZADO (ERRO INTEGRACAO FLUIG)!',
                    'sequencia_arq_rec_convenio':
                    fluig.sequencia_arq_rec_convenio
                }
                comando_sql = '''UPDATE MTZ_ARQS_RECEITAS_CONVENIOS ARC
                                    SET ARC.MENSAGEM_RETORNO_FLUIG     = :mensagem_retorno_fluig
                                       ,ARC.LOG_PROCESSAMENTO          = :log_processamento
                                       ,ARC.DTHR_PROCESSAMENTO         = SYSDATE
                                       ,ARC.STATUS_PROCESSAMENTO       = 'E'
                                  WHERE ARC.SEQUENCIA_ARQ_REC_CONVENIO = :sequencia_arq_rec_convenio'''
                banco_dados.Executar(comando_sql, variaveis_bind, True)

                return False

            return True

        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()