Beispiel #1
0
    def UploadCard(self):
        parametros = Parametros()
        banco_dados.Conectar()
        try:
            variaveis_bind = {
                'sequencia_arq_rec_convenio': self.sequencia_arq_rec_convenio
            }
            comando_sql = '''SELECT LPAD(ARC.CODIGO_DA_FILIAL, 4, '0')
                                   ,LPAD(NFS.NUMERO_DO_CUPOM_FISCAL, 9, '0')
                                   ,TO_CHAR(NFS.DATA_EFETIVA_DA_VENDA, 'DD/MM/YYYY')
                                   ,TO_CHAR(FPV.VALOR, 'FM999999990D00', 'NLS_NUMERIC_CHARACTERS=.,')
                                   ,LPAD(NVL(FPV.ASSO_MATRICULA_DO_ASSOCIADO, '0'), 16, '0')
                                   ,EC.NOME_DA_ENTIDADE_COMERCIAL
                                   ,PFC.CARD_FOLDER_FLUIG
                                   ,ARC.COMPANY_ID_FLUIG
                                   ,ARC.DOCUMENT_ID_FLUIG
                                   ,ARC.DOCUMENT_VERSION_FLUIG
                                   ,ARC.DOCUMENT_DESCRIPTION_FLUIG
                                   ,ARC.DOCUMENT_FOLDER_FLUIG
                               FROM MTZ_ARQS_RECEITAS_CONVENIOS    ARC
                                   ,MTZ_PARAMETROS_FLUIG_CONVENIOS PFC
                                   ,NOTAS_FISCAIS_DE_SAIDA         NFS
                                   ,FORMAS_DE_PAGAMENTO_DA_VENDA   FPV
                                   ,ENTIDADES_COMERCIAIS           EC
                              WHERE ARC.CODIGO_DA_FILIAL_DO_CONVENIO = PFC.CODIGO_DA_FILIAL_DO_CONVENIO
                                AND ARC.CODIGO_DO_CONVENIO           = PFC.CODIGO_DO_CONVENIO
                                AND ARC.CODIGO_DA_FILIAL             = NFS.CODIGO_DA_FILIAL
                                AND ARC.CODIGO_DO_DOCUMENTO_DE_SAIDA = NFS.CODIGO_DO_DOCUMENTO_DE_SAIDA
                                AND ARC.CODIGO_DA_FILIAL             = FPV.CODIGO_DA_FILIAL
                                AND ARC.CODIGO_DO_DOCUMENTO_DE_SAIDA = FPV.CODIGO_DO_DOCUMENTO_DE_SAIDA
                                AND ARC.CODIGO_DA_FORMA_DE_PAGAMENTO = FPV.CODIGO_DA_FORMA_DE_PAGAMENTO
                                AND ARC.SEQUENCIA_FORMA_PAGTO_VENDA  = FPV.SEQUENCIA_FORMA_PAGTO_VENDA
                                AND FPV.ASSO_CODIGO_DO_ASSOCIADO     = EC.CODIGO_DA_ENTIDADE_COMERCIAL
                                AND ARC.SEQUENCIA_ARQ_REC_CONVENIO   = :sequencia_arq_rec_convenio
                                AND NFS.SITUACAO_DA_NOTA_FISCAL      = 1'''
            banco_dados.Executar(comando_sql, variaveis_bind)
            dados_cupom_fiscal = banco_dados.BuscarUm()
            if dados_cupom_fiscal != None:
                xml_envio = xml_card
                xml_envio = xml_envio.replace('#USERNAME#',
                                              parametros.usuario_fluig)
                xml_envio = xml_envio.replace('#PASSWORD#',
                                              parametros.senha_fluig)
                xml_envio = xml_envio.replace('#COMPANY_ID#',
                                              dados_cupom_fiscal[7])
                xml_envio = xml_envio.replace('#CARD_FOLDER#',
                                              dados_cupom_fiscal[6])
                xml_envio = xml_envio.replace('#CODIGO_DA_FILIAL#',
                                              dados_cupom_fiscal[0])
                xml_envio = xml_envio.replace('#NUMERO_DO_CUPOM_FISCAL#',
                                              dados_cupom_fiscal[1])
                xml_envio = xml_envio.replace('#DATA_EFETIVA_DA_VENDA#',
                                              dados_cupom_fiscal[2])
                xml_envio = xml_envio.replace('#VALOR_CONVENIO#',
                                              dados_cupom_fiscal[3])
                xml_envio = xml_envio.replace('#MATRICULA_DO_ASSOCIADO#',
                                              dados_cupom_fiscal[4])
                xml_envio = xml_envio.replace('#NOME_DO_ASSOCIADO#',
                                              dados_cupom_fiscal[5])
                xml_envio = xml_envio.replace('#COMPANY_ID#',
                                              dados_cupom_fiscal[7])
                xml_envio = xml_envio.replace('#DOCUMENT_ID#',
                                              dados_cupom_fiscal[8])
                xml_envio = xml_envio.replace('#DOCUMENT_VERSION#',
                                              dados_cupom_fiscal[9])
                xml_envio = xml_envio.replace('#DOCUMENT_DESCRIPTION#',
                                              dados_cupom_fiscal[10])
                xml_envio = xml_envio.replace('#DOCUMENT_FOLDER#',
                                              dados_cupom_fiscal[11])

                try:
                    comando_sql = '''SELECT LPAD(I.CODIGO_DO_ITEM, 10, 0)
                                           ,LPAD(NVL(I.CODIGO_DE_BARRAS_FORNECEDOR, NVL(I.CODIGO_DE_BARRAS_DIMED, 0)), 18, '0')
                                           ,I.NOMENCLATURA_VAREJO
                                           ,DECODE(I.CATEGORIA, 'R', 'ETICO','G', 'GENERICO', 'S', 'SIMILAR', 'M', 'MANIPULADO' ,'OUTRO')
                                           ,TO_CHAR(INFS.QUANTIDADE, 'FM999999990D00', 'NLS_NUMERIC_CHARACTERS=.,')
                                           ,TO_CHAR(TRUNC(((NVL(INFS.VALOR_UNITARIO, 0) * NVL(INFS.QUANTIDADE, 0)) - NVL(INFS.VALOR_DO_DESCONTO, 0)  - NVL(INFS.VALOR_DE_REPASSE_PBMS, 0)) / NVL(INFS.QUANTIDADE, 0), 2), 'FM999999990D00', 'NLS_NUMERIC_CHARACTERS=.,')
                                           ,TO_CHAR(INFS.VALOR_TOTAL_DO_ITEM, 'FM999999990D00', 'NLS_NUMERIC_CHARACTERS=.,')
                                           ,LPAD(NVL(R.NUMERO_DE_REGISTRO, '0'), 12, '0')
                                       FROM MTZ_ARQS_RECEITAS_CONVENIOS    ARC
                                           ,MTZ_PARAMETROS_FLUIG_CONVENIOS PFC
                                           ,NOTAS_FISCAIS_DE_SAIDA         NFS
                                           ,ITENS_DA_NOTA_FISCAL_DE_SAIDA  INFS
                                           ,ITENS                          I
                                           ,PHW_ITENS_DAS_RECEITAS         IR
                                           ,PHW_RECEITAS                   R
                                      WHERE ARC.CODIGO_DA_FILIAL_DO_CONVENIO  = PFC.CODIGO_DA_FILIAL_DO_CONVENIO
                                        AND ARC.CODIGO_DO_CONVENIO            = PFC.CODIGO_DO_CONVENIO
                                        AND ARC.CODIGO_DA_FILIAL              = NFS.CODIGO_DA_FILIAL
                                        AND ARC.CODIGO_DO_DOCUMENTO_DE_SAIDA  = NFS.CODIGO_DO_DOCUMENTO_DE_SAIDA
                                        AND NFS.CODIGO_DA_FILIAL              = INFS.CODIGO_DA_FILIAL
                                        AND NFS.CODIGO_DO_DOCUMENTO_DE_SAIDA  = INFS.CODIGO_DO_DOCUMENTO_DE_SAIDA
                                        AND INFS.CODIGO_DO_ITEM               = I.CODIGO_DO_ITEM
                                        AND INFS.CODIGO_DA_FILIAL             = IR.INFS_CODIGO_DA_FILIAL (+)
                                        AND INFS.CODIGO_DO_DOCUMENTO_DE_SAIDA = IR.INFS_CODIGO_DO_DOCUMENTO_SAIDA (+)
                                        AND INFS.NUMERO_DO_ITEM               = IR.INFS_NUMERO_DO_ITEM (+)
                                        AND IR.CODIGO_DA_FILIAL               = R.CODIGO_DA_FILIAL (+)
                                        AND IR.CODIGO_DA_RECEITA              = R.CODIGO_DA_RECEITA (+)
                                        AND ARC.SEQUENCIA_ARQ_REC_CONVENIO    = :sequencia_arq_rec_convenio
                                        AND NFS.SITUACAO_DA_NOTA_FISCAL       = 1
                                        AND INFS.SITUACAO_ITEM_DA_NF          = 1'''
                    banco_dados.Executar(comando_sql, variaveis_bind)
                    dados_itens_cupom_fiscal = banco_dados.BuscarTodos()
                    if len(dados_itens_cupom_fiscal) != 0:
                        xml_envio_itens = ''
                        contador = 0
                        for dados_item_cupom_fiscal in dados_itens_cupom_fiscal:
                            contador += 1
                            xml_envio_itens += xml_card_itens
                            xml_envio_itens = xml_envio_itens.replace(
                                '#NUMERO_DO_ITEM#', str(contador))
                            xml_envio_itens = xml_envio_itens.replace(
                                '#CODIGO_DO_ITEM#', dados_item_cupom_fiscal[0])
                            xml_envio_itens = xml_envio_itens.replace(
                                '#CODIGO_DE_BARRAS#',
                                dados_item_cupom_fiscal[1])
                            xml_envio_itens = xml_envio_itens.replace(
                                '#NOMENCLATURA_VAREJO#',
                                dados_item_cupom_fiscal[2])
                            xml_envio_itens = xml_envio_itens.replace(
                                '#CATEGORIA#', dados_item_cupom_fiscal[3])
                            xml_envio_itens = xml_envio_itens.replace(
                                '#QUANTIDADE#', dados_item_cupom_fiscal[4])
                            xml_envio_itens = xml_envio_itens.replace(
                                '#VALOR_UNITARIO#', dados_item_cupom_fiscal[5])
                            xml_envio_itens = xml_envio_itens.replace(
                                '#VALOR_TOTAL#', dados_item_cupom_fiscal[6])
                            xml_envio_itens = xml_envio_itens.replace(
                                '#NUMERO_DO_REGISTRO_CRM#',
                                dados_item_cupom_fiscal[7])

                        xml_envio = xml_envio.replace('#ITENS_DA_NOTA_FISCAL#',
                                                      xml_envio_itens)

                        file = open('tmp/teste.xml', 'w')
                        file.write(xml_envio)
                        file.close()

                        url_webservice = parametros.url_servidor_fluig + '/webdesk/ECMCardService?wsdl'
                        headers = {
                            'content-type': 'text/xml',
                            'SOAPAction': 'createCard'
                        }
                        try:
                            response = requests.post(url_webservice,
                                                     data=xml_envio,
                                                     headers=headers)
                            if response.status_code != requests.codes.ok:
                                response.raise_for_status()

                        except Exception as e:
                            self.mensagem_retorno = str(e.message)
                            return False

                        if response.content:
                            bs = BeautifulSoup(response.content, 'html.parser')
                            if bs.documentid.text == '0':
                                self.mensagem_retorno = bs.webservicemessage.text
                                return False

                            self.card_id = bs.documentid.text
                            self.card_version = bs.version.text
                            self.card_description = bs.documentdescription.text
                            self.card_folder = dados_cupom_fiscal[6]
                            self.mensagem_retorno = bs.webservicemessage.text
                            return True
                        else:
                            self.mensagem_retorno = response.content
                            return False
                    else:
                        self.mensagem_retorno = 'Dados do Arquivo / Itens do Cupom nao localizados.'
                        return False
                except Exception as e:
                    raise
            else:
                self.mensagem_retorno = 'Dados do Arquivo / Cupom nao localizados.'
                return False
        except Exception as e:
            raise
Beispiel #2
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()