def move_event(arquivo, path_destino): import os from emensageriapro.settings import BASE_DIR ident = get_ident(arquivo) path_destino = '/%s/' % path_destino origem = BASE_DIR + arquivo.arquivo novo_arquivo = arquivo.arquivo.replace('/aguardando/', path_destino + ident + '__') destino = BASE_DIR + novo_arquivo os.system('mv %s %s' % (origem, destino)) ImportacaoArquivosEventos.objects.filter(id=arquivo.id).update(arquivo=novo_arquivo) gravar_nome_arquivo(novo_arquivo, 1) return novo_arquivo
def abrir_evento_para_edicao(request, pk): from emensageriapro.settings import BASE_DIR from emensageriapro.mensageiro.functions.funcoes import gravar_nome_arquivo if request.user.has_perm('esocial.can_open_s2190evtAdmPrelim'): s2190_evtadmprelim = get_object_or_404(s2190evtAdmPrelim, id=pk) status_list = [ STATUS_EVENTO_CADASTRADO, STATUS_EVENTO_IMPORTADO, STATUS_EVENTO_DUPLICADO, STATUS_EVENTO_GERADO, STATUS_EVENTO_GERADO_ERRO, STATUS_EVENTO_ASSINADO, STATUS_EVENTO_ASSINADO_ERRO, STATUS_EVENTO_VALIDADO, STATUS_EVENTO_VALIDADO_ERRO, STATUS_EVENTO_AGUARD_PRECEDENCIA, STATUS_EVENTO_AGUARD_ENVIO, STATUS_EVENTO_ENVIADO_ERRO ] if s2190_evtadmprelim.status in status_list: s2190evtAdmPrelim.objects.filter(id=pk).update( status=STATUS_EVENTO_CADASTRADO, arquivo_original=0) arquivo = '/arquivos/Eventos/s2190_evtadmprelim/%s.xml' % ( s2190_evtadmprelim.identidade) if os.path.exists(BASE_DIR + arquivo): data_hora_atual = str(datetime.now()).replace( ':', '_').replace(' ', '_').replace('.', '_') dad = (BASE_DIR, s2190_evtadmprelim.identidade, BASE_DIR, s2190_evtadmprelim.identidade, data_hora_atual) os.system( 'mv %s/arquivos/Eventos/s2190_evtadmprelim/%s.xml %s/arquivos/Eventos/s2190_evtadmprelim/%s_backup_%s.xml' % dad) gravar_nome_arquivo( '/arquivos/Eventos/s2190_evtadmprelim/%s_backup_%s.xml' % (s2190_evtadmprelim.identidade, data_hora_atual), 1) messages.success(request, 'Evento aberto para edição!') request.user.id = request.user.id gravar_auditoria(u'{}', u'{"funcao": "Evento aberto para edição"}', 's2190_evtadmprelim', pk, request.user.id, 2) else: messages.error( request, u''' Não foi possível abrir o evento para edição! Somente é possível abrir eventos com os seguintes status: "Cadastrado", "Importado", "Validado", "Duplicado", "Erro na validação", "XML Assinado" ou "XML Gerado" ou com o status "Enviado com sucesso" e os seguintes códigos de resposta do servidor: "401 - Lote Incorreto - Erro preenchimento" ou "402 - Lote Incorreto - schema Inválido"!''' ) else: messages.error( request, u'''Você não possui permissão para abrir evento para edição. Entre em contato com o administrador do sistema!''' ) return redirect('s2190_evtadmprelim_salvar', pk=pk)
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 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!' )