示例#1
0
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
示例#2
0
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)
示例#3
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!'
        )
示例#4
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 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!'
        )