def assinar_efdreinf(request, xml, transmissor_id): from lxml import etree from emensageriapro.settings import BASE_DIR from signxml import XMLSigner, methods from emensageriapro.mensageiro.functions.funcoes import get_identidade_evento, create_pem_files, ler_arquivo if transmissor_id: tra = TransmissorLoteEfdreinf.objects. \ get(id=transmissor_id) if tra.transmissor: if tra.transmissor.certificado: cert_host = '%s/certificado/%s' % ( BASE_DIR, tra.transmissor.certificado.certificado) cert_pass = tra.transmissor.certificado.senha cert_pem_file = '/certificado/cert_%s.pem' % tra.transmissor.certificado.id key_pem_file = '/certificado/key_%s.pem' % tra.transmissor.certificado.id create_pem_files(cert_host, cert_pass, cert_pem_file, key_pem_file) cert_str = ler_arquivo(cert_pem_file) key_str = ler_arquivo(key_pem_file) root = etree.fromstring(xml) identidade = get_identidade_evento(xml) signed_root = XMLSigner( method=methods.enveloped, signature_algorithm=u'rsa-sha256', digest_algorithm=u'sha256', c14n_algorithm= u'http://www.w3.org/TR/2001/REC-xml-c14n-20010315').sign( root, reference_uri='#' + identidade, key=key_str, cert=cert_str) return etree.tostring(signed_root) else: messages.error( request, '''O certificado não está configurado, configure pelo menos um transmissor para o respectivo empregador!''' ) else: messages.error(request, '''O transmissor não está configurado!''') return xml
def read_consultaLoteEventos(request, arquivo, transmissor_lote_efdreinf_id): from emensageriapro.efdreinf.views.r9011_evttotalcontrib_importar import read_r9011_evttotalcontrib_obj from emensageriapro.mensageiro.functions.funcoes import ler_arquivo import untangle xml = ler_arquivo(arquivo).replace("s:", "") doc = untangle.parse(xml) child = doc.Envelope.Body.ConsultaInformacoesConsolidadasResponse.ConsultaInformacoesConsolidadasResult lote = {} lote['transmissor_lote_efdreinf_id'] = transmissor_lote_efdreinf_id if 'evtTotalContrib' in dir(child.Reinf): dados = read_r9011_evttotalcontrib_obj(request, child, 9) evento_identidade = dados['identidade_evento'] evento_dados = executar_sql( """ SELECT id, evento, identidade, tabela FROM public.vw_transmissor_eventos_efdreinf WHERE identidade='%s'; """ % evento_identidade, True) if evento_dados: executar_sql( "UPDATE public.%s SET retornos_evttotalcontrib_id=%s WHERE id=%s;" % (evento_dados[0][3], dados['id'], evento_dados[0][0]), False)
def create_request(dados): from emensageriapro.mensageiro.functions.funcoes import ler_arquivo, salvar_arquivo_efdreinf if dados['service'] == 'RecepcaoLoteReinf': xml_temp = '' eventos = TransmissorEventosEfdreinf.objects. \ filter(transmissor_lote_efdreinf_id=dados['transmissor_id'], status=STATUS_EVENTO_AGUARD_ENVIO).all() for e in eventos: dados_evento = e.__dict__ xml_temp += '<evento id="%(identidade)s">' % dados_evento xml_temp += ler_arquivo( '/arquivos/Eventos/%(tabela)s/%(identidade)s.xml' % dados_evento) xml_temp += '</evento>' text = REQUEST_RECEBER_LOTE_EVENTOS_EFDREINF.replace( '<!--You may enter ANY elements at this point-->', xml_temp) elif dados['service'] == 'ConsultasReinf': a = TransmissorLoteEfdreinf.objects. \ get(id=dados['transmissor_id']) text = REQUEST_CONSULTA_INFORMACOES_CONSOLIDADES_EFDREINF % a.__dict__ salvar_arquivo_efdreinf(dados['request'], text, 0)
def create_request(dados, transmissor_dados): from emensageriapro.mensageiro.functions.funcoes import salvar_arquivo_esocial, ler_arquivo if dados['service'] == 'WsEnviarLoteEventos': xml = u'' eventos = TransmissorEventosEsocial.objects.\ filter(transmissor_lote_esocial_id=dados['transmissor_id'], status=STATUS_EVENTO_AGUARD_ENVIO).all() dados_evento = {} for e in eventos: dados_evento['evento'] = e.evento dados_evento['id'] = e.id dados_evento['identidade'] = e.identidade dados_evento['grupo'] = e.grupo dados_evento['tabela'] = e.tabela dados_evento[ 'empregador_tpinsc'] = e.transmissor_lote_esocial.empregador_tpinsc dados_evento['empregador_nrinsc'] = retirar_pontuacao_cpf_cnpj( e.transmissor_lote_esocial.empregador_nrinsc) dados_evento[ 'transmissor_tpinsc'] = e.transmissor_lote_esocial.transmissor.transmissor_tpinsc dados_evento['transmissor_nrinsc'] = retirar_pontuacao_cpf_cnpj( e.transmissor_lote_esocial.transmissor.transmissor_nrinsc) xml += '<evento Id="%s">' % e.identidade xml += ler_arquivo( '/arquivos/Eventos/%(tabela)s/%(identidade)s.xml' % dados_evento) xml += '</evento>' base_request = REQUEST_ENVIA_LOTE % dados_evento elif dados['service'] == 'WsConsultarLoteEventos': a = TransmissorLoteEsocial.objects.\ get(id=dados['transmissor_id']) xml = BASE_XML_CONSULTA_LOTE % a.protocolo base_request = REQUEST_CONSULTA_LOTE % transmissor_dados text = base_request.replace( '<!--You may enter ANY elements at this point-->', xml) salvar_arquivo_esocial(dados['request'], text, 0)
def send_xml(request, transmissor_id, service): import os from datetime import datetime from emensageriapro.settings import BASE_DIR from emensageriapro.mensageiro.functions.funcoes import get_transmissor_name, \ ler_arquivo, create_pem_files, send, gravar_nome_arquivo, create_folders TP_AMB = config.ESOCIAL_TP_AMB CA_CERT_PEM_FILE = config.ESOCIAL_CA_CERT_PEM_FILE create_folders() data_atual = str(datetime.now()).replace(':', '-').replace(' ', '-').replace( '.', '-') if TP_AMB == '1': # Produção if service == 'WsEnviarLoteEventos': URL_WS = "https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/enviarloteeventos/WsEnviarLoteEventos.svc" ACTION = "http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v1_1_0/ServicoEnviarLoteEventos/EnviarLoteEventos" elif service == 'WsConsultarLoteEventos': URL_WS = "https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc" ACTION = "http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos" elif TP_AMB == '2': # Produção-Restrita if service == 'WsEnviarLoteEventos': URL_WS = "https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/enviarloteeventos/WsEnviarLoteEventos.svc" ACTION = "http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v1_1_0/ServicoEnviarLoteEventos/EnviarLoteEventos" elif service == 'WsConsultarLoteEventos': URL_WS = "https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc" ACTION = "http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos" tle = TransmissorLoteEsocial.objects. \ get(id=transmissor_id) if tle.transmissor: if tle.transmissor.certificado: cert_host = '%s/certificado/%s' % ( BASE_DIR, tle.transmissor.certificado.certificado) cert_pass = tle.transmissor.certificado.senha cert_pem_file = '/certificado/cert_%s.pem' % tle.transmissor.certificado.id key_pem_file = '/certificado/key_%s.pem' % tle.transmissor.certificado.id create_pem_files(cert_host, cert_pass, cert_pem_file, key_pem_file) else: messages.error( request, 'O certificado não está configurado ou não possuem eventos validados para envio neste lote!' ) return None else: messages.error(request, 'O Transmissor não está configurado!') return None transmissor_dados = {} transmissor_dados['empregador_tpinsc'] = tle.empregador_tpinsc transmissor_dados['empregador_nrinsc'] = retirar_pontuacao_cpf_cnpj( tle.empregador_nrinsc) transmissor_dados[ 'transmissor_tpinsc'] = tle.transmissor.transmissor_tpinsc transmissor_dados['transmissor_nrinsc'] = retirar_pontuacao_cpf_cnpj( tle.transmissor.transmissor_nrinsc) transmissor_dados['esocial_lote_min'] = config.ESOCIAL_LOTE_MIN transmissor_dados['esocial_lote_max'] = config.ESOCIAL_LOTE_MAX transmissor_dados['esocial_timeout'] = int(config.ESOCIAL_TIMEOUT) name = get_transmissor_name(transmissor_id) dados = {} dados['transmissor_id'] = transmissor_id dados['header'] = '/arquivos/Comunicacao/%s/header/%s_%s.txt' % ( service, name, data_atual) dados['request'] = '/arquivos/Comunicacao/%s/request/%s_%s.xml' % ( service, name, data_atual) dados['response'] = '/arquivos/Comunicacao/%s/response/%s_%s.xml' % ( service, name, data_atual) dados[ 'header_completo'] = '%s/arquivos/Comunicacao/%s/header/%s_%s.txt' % ( BASE_DIR, service, name, data_atual) dados[ 'request_completo'] = '%s/arquivos/Comunicacao/%s/request/%s_%s.xml' % ( BASE_DIR, service, name, data_atual) dados[ 'response_completo'] = '%s/arquivos/Comunicacao/%s/response/%s_%s.xml' % ( BASE_DIR, service, name, data_atual) dados['service'] = service dados['url'] = URL_WS dados['cert'] = BASE_DIR + cert_pem_file dados['cacert'] = BASE_DIR + CA_CERT_PEM_FILE dados['key'] = BASE_DIR + key_pem_file dados['action'] = ACTION dados['timeout'] = transmissor_dados['esocial_timeout'] quant_eventos = TransmissorEventosEsocial.objects. \ filter(transmissor_lote_esocial_id=transmissor_id, status=STATUS_EVENTO_AGUARD_ENVIO).count() if tle.transmissor.certificado and (quant_eventos or service == 'WsConsultarLoteEventos'): if (quant_eventos >= transmissor_dados['esocial_lote_min'] and \ quant_eventos <= transmissor_dados['esocial_lote_max'] and \ service == 'WsEnviarLoteEventos') or service == 'WsConsultarLoteEventos': create_request(dados, transmissor_dados) send(dados) gravar_nome_arquivo(dados['header'], 0) gravar_nome_arquivo(dados['request'], 0) gravar_nome_arquivo(dados['response'], 0) if not os.path.isfile(BASE_DIR + dados['response']): messages.error( request, '''O servidor demorou mais que o esperado para efetuar a conexão! Caso necessário solicite ao administrador do sistema para que aumente o tempo do Timeout. Timeout atual %(timeout)s''' % dados) return None elif 'HTTP/1.1 200 OK' not in ler_arquivo(dados['header']): messages.warning( request, 'Retorno do servidor: ' + ler_arquivo(dados['header'])) elif service == 'WsEnviarLoteEventos': from emensageriapro.mensageiro.functions.funcoes_esocial_comunicacao import read_envioLoteEventos, definir_status_evento read_envioLoteEventos(dados['response'], transmissor_id) TransmissorLoteEsocial.objects.filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_ENVIADO, data_hora_envio=datetime.now()) definir_status_evento(transmissor_id) messages.success(request, 'Lote enviado com sucesso!') elif service == 'WsConsultarLoteEventos': from emensageriapro.mensageiro.functions.funcoes_esocial_comunicacao import read_consultaLoteEventos, definir_status_evento read_consultaLoteEventos(dados['response'], transmissor_id) TransmissorLoteEsocial.objects.filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_CONSULTADO, data_hora_consulta=datetime.now()) definir_status_evento(transmissor_id) messages.success(request, 'Lote consultado com sucesso!') elif (quant_eventos < transmissor_dados['esocial_lote_min'] and service == 'WsEnviarLoteEventos'): messages.error(request, 'Lote com quantidade inferior a mínima permitida!') elif (quant_eventos > transmissor_dados['esocial_lote_max'] and service == 'WsEnviarLoteEventos'): messages.error( request, 'Lote com quantidade de eventos superior a máxima permitida!') else: if service == 'WsEnviarLoteEventos': TransmissorLoteEsocial.objects.filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_ENVIADO_ERRO) messages.error(request, 'Erro ao enviar o lote!') elif service == 'WsConsultarLoteEventos': TransmissorLoteEsocial.objects.filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_CONSULTADO_ERRO) messages.error(request, 'Erro ao consultar o lote!') else: messages.error( request, 'O certificado não está configurado ou não possuem eventos validados para envio neste lote!' )
def read_envioLoteEventos(request, arquivo, transmissor_lote_efdreinf_id): from emensageriapro.mensageiro.functions.funcoes import ler_arquivo from emensageriapro.mensageiro.models import TransmissorLoteEfdreinfOcorrencias, TransmissorLoteEfdreinf import untangle xml = ler_arquivo(arquivo).replace("s:", "") doc = untangle.parse(xml) child = doc.Envelope.Body.ReceberLoteEventosResponse.ReceberLoteEventosResult.Reinf.retornoLoteEventos lote = {} if 'IdTransmissor' in dir(child.ideTransmissor): lote[ 'identidade_transmissor'] = child.ideTransmissor.IdTransmissor.cdata if 'cdStatus' in dir(child.status): lote['codigo_status'] = child.status.cdStatus.cdata if 'descRetorno' in dir(child.status): lote['retorno_descricao'] = child.status.descRetorno.cdata TransmissorLoteEfdreinf.objects. \ filter(id=transmissor_lote_efdreinf_id).update(**lote) TransmissorLoteEfdreinfOcorrencias.objects.\ filter(transmissor_lote_efdreinf_id=transmissor_lote_efdreinf_id).delete() if 'dadosRegistroOcorrenciaLote' in dir(child.status): for ocorrencia in child.status.dadosRegistroOcorrenciaLote.ocorrencias: lote_ocorrencias = {} lote_ocorrencias['localizacao'] = '-' if 'tipo' in dir(ocorrencia): lote_ocorrencias['tipo'] = ocorrencia.tipo.cdata if 'localizacaoErroAviso' in dir(ocorrencia): lote_ocorrencias[ 'localizacao'] = ocorrencia.localizacaoErroAviso.cdata if 'codigo' in dir(ocorrencia): lote_ocorrencias['resposta_codigo'] = ocorrencia.codigo.cdata if 'descricao' in dir(ocorrencia): lote_ocorrencias['descricao'] = ocorrencia.descricao.cdata lote_ocorrencias[ 'transmissor_lote_efdreinf_id'] = transmissor_lote_efdreinf_id obj = TransmissorLoteEfdreinfOcorrencias(**lote_ocorrencias) obj.save(using='default') if 'retornoEventos' in dir(child): eventos_retorno = [ 's5001evtBasesTrab', 's5002evtIrrfBenef', 's5003evtBasesFGTS', 's5011evtCS', 's5012evtIrrf', 's5013evtFGTS', ] for evento in child.retornoEventos.evento: if 'evtTotal' in dir(evento.Reinf): from emensageriapro.efdreinf.views.r9001_evttotal_importar import read_r9001_evttotal_obj from emensageriapro.efdreinf.models import r9001evtTotal dados = read_r9001_evttotal_obj(request, evento, STATUS_EVENTO_PROCESSADO) retornos_evttotal = r9001evtTotal.objects. \ get(id=dados['id']) from django.apps import apps app_models = apps.get_app_config('efdreinf').get_models() for model in app_models: if retornos_evttotal.cdretorno == '1' and model._meta.object_name not in EVENTOS_RETORNO: model.objects.filter( identidade=evento['id'], transmissor_lote_efdreinf_id=transmissor_lote_efdreinf_id). \ update(status=STATUS_EVENTO_ENVIADO_ERRO, ocorrencias=get_ocorrencias('r9001', retornos_evttotal.id), retornos_r9001_id=retornos_evttotal.id, transmissor_lote_efdreinf_id=None, transmissor_lote_efdreinf_error=transmissor_lote_efdreinf_id) elif retornos_evttotal.cdretorno == '0' and model._meta.object_name not in EVENTOS_RETORNO: model.objects.filter( identidade=evento['id'], transmissor_lote_efdreinf_id=transmissor_lote_efdreinf_id). \ update(status=STATUS_EVENTO_ENVIADO, ocorrencias=get_ocorrencias('r9001', retornos_evttotal.id), retornos_r9001_id=retornos_evttotal.id, transmissor_lote_efdreinf_error_id=None) return retornos_evttotal if 'evtTotalContrib' in dir(evento.Reinf): from emensageriapro.efdreinf.views.r9011_evttotalcontrib_importar import read_r9011_evttotalcontrib_obj from emensageriapro.efdreinf.models import r9011evtTotalContrib dados = read_r9011_evttotalcontrib_obj( request, evento, STATUS_EVENTO_PROCESSADO) retornos_evttotalcontrib = r9011evtTotalContrib.objects.get( id=dados['id']) from django.apps import apps app_models = apps.get_app_config('efdreinf').get_models() for model in app_models: if retornos_evttotalcontrib.cdretorno == '1' and model._meta.object_name not in EVENTOS_RETORNO: model.objects.filter( identidade=evento['id'], transmissor_lote_efdreinf_id=transmissor_lote_efdreinf_id). \ update(status=STATUS_EVENTO_ENVIADO_ERRO, ocorrencias=get_ocorrencias('r9011', retornos_evttotalcontrib.id), retornos_r9011_id=retornos_evttotalcontrib.id, transmissor_lote_efdreinf_id=None ) elif retornos_evttotalcontrib.cdretorno == '0' and model._meta.object_name not in EVENTOS_RETORNO: model.objects.filter( identidade=evento['id'], transmissor_lote_esocial_id=transmissor_lote_efdreinf_id). \ update(status=STATUS_EVENTO_PROCESSADO, ocorrencias=get_ocorrencias('r9011', retornos_evttotalcontrib.id), retornos_r9011_id=retornos_evttotalcontrib.id ) return retornos_evttotalcontrib
def send_xml(request, transmissor_id, service): import os from datetime import datetime from emensageriapro.settings import BASE_DIR from emensageriapro.mensageiro.functions.funcoes import ler_arquivo, \ get_transmissor_name, create_pem_files, send, gravar_nome_arquivo, create_folders CA_CERT_PEM_FILE = config.EFDREINF_CA_CERT_PEM_FILE TP_AMB = config.EFDREINF_TP_AMB create_folders() data_atual = str(datetime.now()).replace(':', '-').replace(' ', '-').replace( '.', '-') if TP_AMB == '1': # Produção if service == 'RecepcaoLoteReinf': URL = "https://reinf.receita.fazenda.gov.br/WsREINF/RecepcaoLoteReinf.svc" ACTION = "http://sped.fazenda.gov.br/RecepcaoLoteReinf/ReceberLoteEventos" elif service == 'ConsultasReinf': URL = "https://reinf.receita.fazenda.gov.br/WsReinfConsultas/ConsultasReinf.svc" ACTION = "http://sped.fazenda.gov.br/ConsultasReinf/ConsultaInformacoesConsolidadas" elif TP_AMB == '2': # Produção-Restrita if service == 'RecepcaoLoteReinf': URL = "https://preprodefdreinf.receita.fazenda.gov.br/wsreinf/RecepcaoLoteReinf.svc" ACTION = "http://sped.fazenda.gov.br/RecepcaoLoteReinf/ReceberLoteEventos" elif service == 'ConsultasReinf': URL = "https://preprodefdreinf.receita.fazenda.gov.br/WsReinfConsultas/ConsultasReinf.svc" ACTION = "http://sped.fazenda.gov.br/ConsultasReinf/ConsultaInformacoesConsolidadas" tra = TransmissorLoteEfdreinf.objects.\ get(id=transmissor_id) if tra.transmissor: if tra.transmissor.certificado: cert_host = '%s/certificado/%s' % ( BASE_DIR, tra.transmissor.certificado.certificado) cert_pass = tra.transmissor.certificado.senha cert_pem_file = '/certificado/cert_%s.pem' % tra.transmissor.certificado.id key_pem_file = '/certificado/key_%s.pem' % tra.transmissor.certificado.id create_pem_files(cert_host, cert_pass, cert_pem_file, key_pem_file) else: messages.error( request, 'O certificado não está configurado ou não possuem eventos validados para envio neste lote!' ) return None else: messages.error(request, 'O Transmissor não está configurado!') return None dados = {} dados['contribuinte_tpinsc'] = tra.contribuinte_tpinsc dados['contribuinte_nrinsc'] = retirar_pontuacao_cpf_cnpj( tra.contribuinte_nrinsc) dados['transmissor_id'] = transmissor_id dados['efdreinf_lote_min'] = config.EFDREINF_LOTE_MIN dados['efdreinf_lote_max'] = config.EFDREINF_LOTE_MIN dados['efdreinf_timeout'] = int(config.EFDREINF_TIMEOUT) name = get_transmissor_name(transmissor_id) dados['transmissor_id'] = transmissor_id dados['header'] = '/arquivos/Comunicacao/%s/header/%s_%s.txt' % ( service, name, data_atual) dados['request'] = '/arquivos/Comunicacao/%s/request/%s_%s.xml' % ( service, name, data_atual) dados['response'] = '/arquivos/Comunicacao/%s/response/%s_%s.xml' % ( service, name, data_atual) dados[ 'header_completo'] = '%s/arquivos/Comunicacao/%s/header/%s_%s.txt' % ( BASE_DIR, service, name, data_atual) dados[ 'request_completo'] = '%s/arquivos/Comunicacao/%s/request/%s_%s.xml' % ( BASE_DIR, service, name, data_atual) dados[ 'response_completo'] = '%s/arquivos/Comunicacao/%s/response/%s_%s.xml' % ( BASE_DIR, service, name, data_atual) dados['service'] = service dados['url'] = URL dados['cert'] = BASE_DIR + cert_pem_file dados['cacert'] = BASE_DIR + CA_CERT_PEM_FILE dados['key'] = BASE_DIR + key_pem_file dados['action'] = ACTION dados['timeout'] = dados['efdreinf_timeout'] quant_eventos = TransmissorEventosEfdreinf.objects. \ filter(transmissor_lote_efdreinf_id=transmissor_id, status=STATUS_EVENTO_AGUARD_ENVIO).count() if tra.transmissor.certificado and (quant_eventos or service == 'ConsultasReinf'): if (quant_eventos >= dados['efdreinf_lote_min'] and \ quant_eventos <= dados['efdreinf_lote_max'] and \ service == 'RecepcaoLoteReinf') or service == 'ConsultasReinf': create_request(dados) send(dados) gravar_nome_arquivo(dados['header'], 0) gravar_nome_arquivo(dados['request'], 0) gravar_nome_arquivo(dados['response'], 0) if not os.path.isfile(BASE_DIR + dados['response']): messages.error( request, '''O servidor demorou mais que o esperado para efetuar a conexão! Caso necessário solicite ao administrador do sistema para que aumente o tempo do Timeout. Timeout atual %(timeout)s''' % dados) return None elif 'HTTP/1.1 200 OK' not in ler_arquivo(dados['header']): messages.warning( request, 'Retorno do servidor: ' + ler_arquivo(dados['header'])) elif service == 'RecepcaoLoteReinf': from emensageriapro.mensageiro.functions.funcoes_efdreinf_comunicacao import read_envioLoteEventos, definir_status_evento read_envioLoteEventos(request, dados['response'], transmissor_id) messages.success(request, 'Lote enviado com sucesso!') TransmissorLoteEfdreinf.objects.\ filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_ENVIADO, data_hora_envio=datetime.now()) definir_status_evento(transmissor_id) elif service == 'ConsultasReinf': from emensageriapro.mensageiro.functions.funcoes_efdreinf_comunicacao import read_consultaLoteEventos, definir_status_evento read_consultaLoteEventos(request, dados['response'], transmissor_id) messages.success(request, 'Lote consultado com sucesso!') TransmissorLoteEfdreinf.objects.\ filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_CONSULTADO, data_hora_consulta=datetime.now()) definir_status_evento(transmissor_id) elif quant_eventos < dados[ 'efdreinf_lote_min'] and service == 'RecepcaoLoteReinf': messages.error(request, 'Lote com quantidade inferior a mínima permitida!') TransmissorLoteEfdreinf.objects.\ filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_CADASTRADO) elif quant_eventos > dados[ 'efdreinf_lote_max'] and service == 'RecepcaoLoteReinf': messages.error( request, 'Lote com quantidade de eventos superior a máxima permitida!') TransmissorLoteEfdreinf.objects.\ filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_CADASTRADO) else: messages.error(request, 'Erro ao enviar o lote!') if service == 'RecepcaoLoteReinf': TransmissorLoteEfdreinf.objects.\ filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_ENVIADO_ERRO) elif service == 'ConsultasReinf': TransmissorLoteEfdreinf.objects.\ filter(id=transmissor_id).\ update(status=TRANSMISSOR_STATUS_CONSULTADO_ERRO) else: messages.error( request, 'O certificado não está configurado ou não possuem eventos validados para envio neste lote!' )