def print_danfe(invoices):
    str_pdf = ""
    paths = []

    for inv in invoices:
        if inv.nfe_version == '1.10':
            from pysped.nfe.leiaute import ProcNFe_110
            procnfe = ProcNFe_110()
        elif inv.nfe_version == '2.00':
            from pysped.nfe.leiaute import ProcNFe_200
            procnfe = ProcNFe_200()
        elif inv.nfe_version == '3.10':
            from pysped.nfe.leiaute import ProcNFe_310
            procnfe = ProcNFe_310()
        elif inv.nfe_version == '4.00':
            from pysped.nfe.leiaute import ProcNFe_400
            procnfe = ProcNFe_400()

        file_xml = monta_caminho_nfe(inv.company_id, inv.nfe_access_key)
        if inv.state not in ('open', 'paid', 'sefaz_cancelled'):
            file_xml = os.path.join(file_xml, 'tmp/')
        procnfe.xml = os.path.join(file_xml, inv.nfe_access_key + '-nfe.xml')
        danfe = DANFE()
        danfe.logo = add_backgound_to_logo_image(inv.company_id)
        danfe.NFe = procnfe.NFe
        danfe.leiaute_logo_vertical = inv.company_id.nfe_logo_vertical
        danfe.protNFe = procnfe.protNFe
        danfe.caminho = "/tmp/"
        danfe.gerar_danfe()
        paths.append(danfe.caminho + danfe.NFe.chave + '.pdf')
        inv.is_danfe_printed = True

        if inv.cce_document_event_ids:
            daede = DAEDE()
            daede.logo = add_backgound_to_logo_image(inv.company_id)
            daede.NFe = procnfe.NFe
            daede.protNFe = procnfe.protNFe
            for item, event in enumerate(inv.cce_document_event_ids):
                proc_evento = ProcEventoCCe_100()
                doc_item = str(item + 1).zfill(2)
                proc_evento.xml = os.path.join(
                    file_xml, inv.nfe_access_key + '-' + doc_item + '-cce.xml')
                daede.procEventos.append(proc_evento)

            daede.caminho = "/tmp/"
            daede.gerar_daede()
            paths.append(daede.caminho + 'eventos-' + daede.NFe.chave + '.pdf')

    output = PdfFileWriter()
    s = StringIO()

    for path in paths:
        pdf = PdfFileReader(file(path, "rb"))
        for i in range(pdf.getNumPages()):
            output.addPage(pdf.getPage(i))
        output.write(s)

    str_pdf = s.getvalue()
    s.close()
    return str_pdf
def print_danfe(xml_nfe):
    from pysped.nfe.leiaute import ProcNFe_310
    from pysped.nfe.danfe import DANFE
    procnfe = ProcNFe_310()

    paths = []
    procnfe.xml = xml_nfe
    danfe = DANFE()
    danfe.NFe = procnfe.NFe
    danfe.protNFe = procnfe.protNFe
    danfe.caminho = "/tmp/"
    danfe.gerar_danfe()
    paths.append(danfe.caminho + danfe.NFe.chave + '.pdf')

    output = PdfFileWriter()
    s = StringIO()

    for path in paths:
        pdf = PdfFileReader(file(path, "rb"))
        for i in range(pdf.getNumPages()):
            output.addPage(pdf.getPage(i))
        output.write(s)

    str_pdf = s.getvalue()
    s.close()
    return str_pdf
Пример #3
0
def print_danfe(inv):
    str_pdf = ""
    paths = []

    if inv.nfe_version == '1.10':
        from pysped.nfe.leiaute import ProcNFe_110
        procnfe = ProcNFe_110()
    elif inv.nfe_version == '2.00':
        from pysped.nfe.leiaute import ProcNFe_200
        procnfe = ProcNFe_200()
    elif inv.nfe_version == '3.10':
        from pysped.nfe.leiaute import ProcNFe_310
        procnfe = ProcNFe_310()

    file_xml = monta_caminho_nfe(inv.company_id, inv.nfe_access_key)
    if inv.state not in ('open', 'paid', 'sefaz_cancelled'):
        file_xml = os.path.join(file_xml, 'tmp/')
    procnfe.xml = os.path.join(file_xml, inv.nfe_access_key + '-nfe.xml')
    danfe = DANFE()
    danfe.logo = add_backgound_to_logo_image(inv.company_id)
    danfe.NFe = procnfe.NFe
    danfe.leiaute_logo_vertical = inv.company_id.nfe_logo_vertical
    danfe.protNFe = procnfe.protNFe
    danfe.caminho = "/tmp/"
    danfe.gerar_danfe()
    paths.append(danfe.caminho + danfe.NFe.chave + '.pdf')

    output = PdfFileWriter()
    s = StringIO()

    for path in paths:
        pdf = PdfFileReader(file(path, "rb"))
        for i in range(pdf.getNumPages()):
            output.addPage(pdf.getPage(i))
        output.write(s)

    str_pdf = s.getvalue()
    s.close()
    return str_pdf
Пример #4
0
    def resposta(self):
        if not self.texto:
            return None

        resposta = None
        if self.schema.valor in ('resNFe_v1.00.xsd', 'resNFe_v1.01.xsd'):
            resposta = ResNFe()
            texto = unicodedata.normalize(b'NFKD', self.texto).encode(
                'ascii', 'ignore')
            resposta.xml = texto
        elif self.schema.valor in ('resEvento_v1.00.xsd',
                                   'resEvento_v1.01.xsd'):
            resposta = ResEvento()
            texto = unicodedata.normalize(b'NFKD', self.texto).encode(
                'ascii', 'ignore')
            resposta.xml = texto
        elif self.schema.valor == 'procNFe_v3.10.xsd':
            resposta = ProcNFe_310()
            resposta.xml = self.texto
        elif self.schema.valor == 'procEventoNFe_v1.00.xsd':
            resposta = ProcEvento_100()
            resposta.xml = self.texto

        return resposta
    def envia_cce(self):
        self.ensure_one()

        processador = self.documento_id.processador_nfe()

        xml = self.documento_id.arquivo_xml_autorizacao_id.datas.decode(
            'base64')
        xml = xml.decode('utf-8')

        procNFe = ProcNFe_310()

        procNFe.xml = xml
        procNFe.NFe.monta_chave()

        evento = EventoCCe_100()
        evento.infEvento.tpAmb.valor = procNFe.NFe.infNFe.ide.tpAmb.valor
        evento.infEvento.cOrgao.valor = procNFe.NFe.chave[:2]
        evento.infEvento.CNPJ.valor = procNFe.NFe.infNFe.emit.CNPJ.valor
        evento.infEvento.chNFe.valor = procNFe.NFe.chave
        evento.infEvento.dhEvento.valor = agora()

        #self.correcao =
        ##
        ## Correção ASP - Cláudia copiou e colou e veio esse caracter esquisito
        ##
        #if self.correcao:
        #self.correcao = self.correcao.replace('\u200b', ' ')

        evento.infEvento.detEvento.xCorrecao.valor = self.correcao or ''
        evento.infEvento.nSeqEvento.valor = self.sequencia or 1

        if processador.certificado:
            processador.certificado.assina_xmlnfe(evento)

        processador.salvar_arquivo = True
        processo = processador.enviar_lote_cce(lista_eventos=[evento])

        #
        # A CC-e foi aceita e vinculada à NF-e
        #
        if self.documento_id.chave in processo.resposta.dic_procEvento:
            procevento = \
                processo.resposta.dic_procEvento[self.documento_id.chave]

            retevento = procevento.retEvento

            if retevento.infEvento.cStat.valor not in ('135', '136'):
                mensagem = 'Erro na carta de correção'
                mensagem += '\nCódigo: ' + retevento.infEvento.cStat.valor
                mensagem += '\nMotivo: ' + \
                    retevento.infEvento.xMotivo.valor
                raise UserError(mensagem)

            self.grava_xml(procNFe.NFe, evento)
            self.grava_xml_autorizacao(procNFe.NFe, procevento)

            data_autorizacao = retevento.infEvento.dhRegEvento.valor
            data_autorizacao = UTC.normalize(data_autorizacao)

            #
            # Gera o DAEDE da nova CC-e
            #
            processador.daede.NFe.xml = procNFe.NFe.xml
            processador.daede.protNFe = procNFe.protNFe
            processador.daede.procEventos = [procevento]
            processador.daede.salvar_arquivo = False
            processador.daede.gerar_daede()
            self.grava_pdf(procNFe.NFe, processador.daede.conteudo_pdf)

            self.data_hora_autorizacao = data_autorizacao
            self.protocolo_autorizacao = \
                procevento.retEvento.infEvento.nProt.valor