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