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