# -*- coding: utf-8 -*-
# Copyright (C) 2013 Renato Lima - Akretion
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from datetime import datetime
from openerp import pooler
from openerp.exceptions import Warning as UserError
from openerp.tools.translate import _
from openerp.addons.l10n_br_account.sped.document import FiscalDocument
from openerp.addons.l10n_br_base.tools.misc import punctuation_rm
[documentos]class NFe200(FiscalDocument):
def __init__(self):
super(NFe200, self).__init__()
self.nfe = None
self.nfref = None
self.det = None
self.dup = None
def _serializer(self, cr, uid, ids, nfe_environment, context=None):
pool = pooler.get_pool(cr.dbname)
nfes = []
if not context:
context = {'lang': 'pt_BR'}
for invoice in pool.get('account.invoice').browse(cr, uid, ids,
context):
company = pool.get('res.partner').browse(
cr, uid, invoice.company_id.partner_id.id, context)
self.nfe = self.get_NFe()
self._nfe_identification(invoice, company, nfe_environment)
self._in_out_adress(invoice)
for inv_related in invoice.fiscal_document_related_ids:
self.nfref = self._get_NFRef()
self._nfe_references(inv_related)
self.nfe.infNFe.ide.NFref.append(self.nfref)
self._emmiter(invoice, company)
self._receiver(invoice, company, nfe_environment)
i = 0
for inv_line in invoice.invoice_line:
i += 1
self.det = self._get_Det()
self._details(invoice, inv_line, i)
for inv_di in inv_line.import_declaration_ids:
self.di = self._get_DI()
self._di(inv_di)
for inv_di_line in inv_di.line_ids:
self.di_line = self._get_Addition()
self._addition(inv_di_line)
self.di.adi.append(self.di_line)
self.det.prod.DI.append(self.di)
self.nfe.infNFe.det.append(self.det)
if invoice.journal_id.revenue_expense:
for move_line in invoice.move_line_receivable_id:
self.dup = self._get_Dup()
self._encashment_data(invoice, move_line)
self.nfe.infNFe.cobr.dup.append(self.dup)
try:
self._carrier_data(invoice)
except AttributeError:
pass
self.vol = self._get_Vol()
self._weight_data(invoice)
self.nfe.infNFe.transp.vol.append(self.vol)
self._additional_information(invoice)
self._total(invoice)
self._export(invoice)
# Gera Chave da NFe
self.nfe.gera_nova_chave()
nfes.append(self.nfe)
return nfes
def _nfe_identification(self, invoice, company, nfe_environment):
# Identificação da NF-e
#
self.nfe.infNFe.ide.cUF.valor = (company.state_id and
company.state_id.ibge_code or '')
self.nfe.infNFe.ide.cNF.valor = ''
self.nfe.infNFe.ide.natOp.valor = (
invoice.fiscal_category_id.name[:60] or '')
self.nfe.infNFe.ide.indPag.valor = (invoice.payment_term and
invoice.payment_term.indPag or '0')
self.nfe.infNFe.ide.mod.valor = invoice.fiscal_document_id.code or ''
self.nfe.infNFe.ide.serie.valor = invoice.document_serie_id.code or ''
self.nfe.infNFe.ide.nNF.valor = invoice.internal_number or ''
self.nfe.infNFe.ide.dEmi.valor = invoice.date_invoice or ''
self.nfe.infNFe.ide.dSaiEnt.valor = datetime.strptime(
invoice.date_in_out, '%Y-%m-%d %H:%M:%S').date() or ''
self.nfe.infNFe.ide.cMunFG.valor = ('%s%s') % (
company.state_id.ibge_code, company.l10n_br_city_id.ibge_code)
self.nfe.infNFe.ide.tpImp.valor = 1 # (1 - Retrato; 2 - Paisagem)
self.nfe.infNFe.ide.tpEmis.valor = 1
self.nfe.infNFe.ide.tpAmb.valor = nfe_environment
self.nfe.infNFe.ide.finNFe.valor = invoice.nfe_purpose
self.nfe.infNFe.ide.procEmi.valor = 0
self.nfe.infNFe.ide.verProc.valor = 'Odoo Brasil v8'
self.nfe.infNFe.compra.xPed.valor = invoice.name or ''
if invoice.cfop_ids[0].type in ("input"):
self.nfe.infNFe.ide.tpNF.valor = 0
else:
self.nfe.infNFe.ide.tpNF.valor = 1
def _in_out_adress(self, invoice):
#
# Endereço de Entrega ou Retirada
#
if invoice.partner_shipping_id:
if invoice.partner_id.id != invoice.partner_shipping_id.id:
if self.nfe.infNFe.ide.tpNF.valor == 0:
self.nfe.infNFe.retirada.CNPJ.valor = punctuation_rm(
invoice.partner_shipping_id.cnpj_cpf)
self.nfe.infNFe.retirada.xLgr.valor = (
invoice.partner_shipping_id.street or '')
self.nfe.infNFe.retirada.nro.valor = (
invoice.partner_shipping_id.number or '')
self.nfe.infNFe.retirada.xCpl.valor = (
invoice.partner_shipping_id.street2 or '')
self.nfe.infNFe.retirada.xBairro.valor = (
invoice.partner_shipping_id.district or 'Sem Bairro')
self.nfe.infNFe.retirada.cMun.valor = '%s%s' % (
invoice.partner_shipping_id.state_id.ibge_code,
invoice.partner_shipping_id.l10n_br_city_id.ibge_code)
self.nfe.infNFe.retirada.xMun.valor = (
invoice.partner_shipping_id.l10n_br_city_id.name or '')
self.nfe.infNFe.retirada.UF.valor = (
invoice.partner_shipping_id.state_id.code or '')
else:
self.nfe.infNFe.entrega.CNPJ.valor = punctuation_rm(
invoice.partner_shipping_id.cnpj_cpf)
self.nfe.infNFe.entrega.xLgr.valor = (
invoice.partner_shipping_id.street or '')
self.nfe.infNFe.entrega.nro.valor = (
invoice.partner_shipping_id.number or '')
self.nfe.infNFe.entrega.xCpl.valor = (
invoice.partner_shipping_id.street2 or '')
self.nfe.infNFe.entrega.xBairro.valor = (
invoice.partner_shipping_id.district or 'Sem Bairro')
self.nfe.infNFe.entrega.cMun.valor = '%s%s' % (
invoice.partner_shipping_id.state_id.ibge_code,
invoice.partner_shipping_id.l10n_br_city_id.ibge_code)
self.nfe.infNFe.entrega.xMun.valor = (
invoice.partner_shipping_id.l10n_br_city_id.name or '')
self.nfe.infNFe.entrega.UF.valor = (
invoice.partner_shipping_id.state_id.code or '')
def _nfe_references(self, inv_related):
#
# Documentos referenciadas
#
if inv_related.document_type == 'nf':
self.nfref.refNF.cUF.valor = (
inv_related.state_id and
inv_related.state_id.ibge_code or '',)
self.nfref.refNF.AAMM.valor = datetime.strptime(
inv_related.date, '%Y-%m-%d').strftime('%y%m') or ''
self.nfref.refNF.CNPJ.valor = punctuation_rm(inv_related.cnpj_cpf)
self.nfref.refNF.mod.valor = (
inv_related.fiscal_document_id and
inv_related.fiscal_document_id.code or '')
self.nfref.refNF.serie.valor = inv_related.serie or ''
self.nfref.refNF.nNF.valor = inv_related.internal_number or ''
elif inv_related.document_type == 'nfrural':
self.nfref.refNFP.cUF.valor = (
inv_related.state_id and
inv_related.state_id.ibge_code or '',)
self.nfref.refNFP.AAMM.valor = datetime.strptime(
inv_related.date, '%Y-%m-%d').strftime('%y%m') or ''
self.nfref.refNFP.IE.valor = punctuation_rm(inv_related.inscr_est)
self.nfref.refNFP.mod.valor = (
inv_related.fiscal_document_id and
inv_related.fiscal_document_id.code or '')
self.nfref.refNFP.serie.valor = inv_related.serie or ''
self.nfref.refNFP.nNF.valor = inv_related.internal_number or ''
if inv_related.cpfcnpj_type == 'cnpj':
self.nfref.refNFP.CNPJ.valor = punctuation_rm(
inv_related.cnpj_cpf)
else:
self.nfref.refNFP.CPF.valor = punctuation_rm(
inv_related.cnpj_cpf)
elif inv_related.document_type == 'nfe':
self.nfref.refNFe.valor = inv_related.access_key or ''
elif inv_related.document_type == 'cte':
self.nfref.refCTe.valor = inv_related.access_key or ''
elif inv_related.document_type == 'cf':
self.nfref.refECF.mod.valor = (
inv_related.fiscal_document_id and
inv_related.fiscal_document_id.code or '')
self.nfref.refECF.nECF.valor = inv_related.internal_number
self.nfref.refECF.nCOO.valor = inv_related.serie
def _emmiter(self, invoice, company):
"""Emitente"""
self.nfe.infNFe.emit.CNPJ.valor = punctuation_rm(
invoice.company_id.partner_id.cnpj_cpf)
self.nfe.infNFe.emit.xNome.valor = (
invoice.company_id.partner_id.legal_name[:60])
self.nfe.infNFe.emit.xFant.valor = invoice.company_id.partner_id.name
self.nfe.infNFe.emit.enderEmit.xLgr.valor = company.street or ''
self.nfe.infNFe.emit.enderEmit.nro.valor = company.number or ''
self.nfe.infNFe.emit.enderEmit.xCpl.valor = company.street2 or ''
self.nfe.infNFe.emit.enderEmit.xBairro.valor = (
company.district or 'Sem Bairro')
self.nfe.infNFe.emit.enderEmit.cMun.valor = '%s%s' % (
company.state_id.ibge_code, company.l10n_br_city_id.ibge_code)
self.nfe.infNFe.emit.enderEmit.xMun.valor = (
company.l10n_br_city_id.name or '')
self.nfe.infNFe.emit.enderEmit.UF.valor = company.state_id.code or ''
self.nfe.infNFe.emit.enderEmit.CEP.valor = punctuation_rm(
company.zip or '')
self.nfe.infNFe.emit.enderEmit.cPais.valor = (
company.country_id.bc_code[1:])
self.nfe.infNFe.emit.enderEmit.xPais.valor = company.country_id.name
self.nfe.infNFe.emit.enderEmit.fone.valor = punctuation_rm(
str(company.phone or '').replace(' ', ''))
self.nfe.infNFe.emit.IE.valor = punctuation_rm(
invoice.company_id.partner_id.inscr_est)
self.nfe.infNFe.emit.IEST.valor = ''
self.nfe.infNFe.emit.IM.valor = punctuation_rm(
invoice.company_id.partner_id.inscr_mun or '')
self.nfe.infNFe.emit.CRT.valor = invoice.company_id.fiscal_type or ''
if invoice.company_id.partner_id.inscr_mun:
self.nfe.infNFe.emit.CNAE.valor = punctuation_rm(
invoice.company_id.cnae_main_id.code or '')
def _receiver(self, invoice, company, nfe_environment):
"""Destinatário"""
partner_bc_code = ''
address_invoice_state_code = ''
address_invoice_city = ''
partner_cep = ''
if invoice.partner_id.country_id.bc_code:
partner_bc_code = invoice.partner_id.country_id.bc_code[1:]
if invoice.partner_id.country_id.id != \
invoice.company_id.country_id.id:
address_invoice_state_code = 'EX'
address_invoice_city = 'Exterior'
address_invoice_city_code = '9999999'
else:
address_invoice_state_code = invoice.partner_id.state_id.code
address_invoice_city = (
invoice.partner_id.l10n_br_city_id.name or '')
address_invoice_city_code = ('%s%s') % (
invoice.partner_id.state_id.ibge_code,
invoice.partner_id.l10n_br_city_id.ibge_code)
partner_cep = punctuation_rm(invoice.partner_id.zip)
# Se o ambiente for de teste deve ser
# escrito na razão do destinatário
if nfe_environment == '2':
self.nfe.infNFe.dest.xNome.valor = (
'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL')
else:
self.nfe.infNFe.dest.xNome.valor = (
invoice.partner_id.legal_name[:60] or '')
if invoice.partner_id.is_company:
self.nfe.infNFe.dest.IE.valor = punctuation_rm(
invoice.partner_id.inscr_est)
if invoice.partner_id.country_id.id == \
invoice.company_id.country_id.id:
if invoice.partner_id.is_company:
self.nfe.infNFe.dest.CNPJ.valor = punctuation_rm(
invoice.partner_id.cnpj_cpf)
else:
self.nfe.infNFe.dest.CPF.valor = punctuation_rm(
invoice.partner_id.cnpj_cpf)
self.nfe.infNFe.dest.indIEDest.valor = \
invoice.partner_id.partner_fiscal_type_id.ind_ie_dest
self.nfe.infNFe.dest.enderDest.xLgr.valor = (
invoice.partner_id.street or '')
self.nfe.infNFe.dest.enderDest.nro.valor = (
invoice.partner_id.number or '')
self.nfe.infNFe.dest.enderDest.xCpl.valor = (
invoice.partner_id.street2 or '')
self.nfe.infNFe.dest.enderDest.xBairro.valor = (
invoice.partner_id.district or 'Sem Bairro')
self.nfe.infNFe.dest.enderDest.cMun.valor = address_invoice_city_code
self.nfe.infNFe.dest.enderDest.xMun.valor = address_invoice_city
self.nfe.infNFe.dest.enderDest.UF.valor = address_invoice_state_code
self.nfe.infNFe.dest.enderDest.CEP.valor = partner_cep
self.nfe.infNFe.dest.enderDest.cPais.valor = partner_bc_code
self.nfe.infNFe.dest.enderDest.xPais.valor = (
invoice.partner_id.country_id.name or '')
self.nfe.infNFe.dest.enderDest.fone.valor = punctuation_rm(
invoice.partner_id.phone or '').replace(' ', '')
self.nfe.infNFe.dest.email.valor = invoice.partner_id.email or ''
def _details(self, invoice, invoice_line, index):
"""Detalhe"""
self.det.nItem.valor = index
if invoice_line.product_id:
self.det.prod.cProd.valor = invoice_line.product_id.code or ''
self.det.prod.cEAN.valor = invoice_line.product_id.ean13 or ''
self.det.prod.cEANTrib.valor = invoice_line.product_id.ean13 or ''
self.det.prod.xProd.valor = (
invoice_line.product_id.name[:120] or '')
else:
self.det.prod.cProd.valor = invoice_line.code or ''
self.det.prod.xProd.valor = invoice_line.name[:120] or ''
self.det.prod.NCM.valor = punctuation_rm(
invoice_line.fiscal_classification_id.code or '')[:8]
self.det.prod.EXTIPI.valor = punctuation_rm(
invoice_line.fiscal_classification_id.code or '')[8:]
self.det.prod.nFCI.valor = invoice_line.fci or ''
self.det.prod.CFOP.valor = invoice_line.cfop_id.code
self.det.prod.uCom.valor = invoice_line.uos_id.name or ''
self.det.prod.qCom.valor = str("%.4f" % invoice_line.quantity)
self.det.prod.vUnCom.valor = str("%.7f" % invoice_line.price_unit)
self.det.prod.vProd.valor = str("%.2f" % invoice_line.price_gross)
self.det.prod.uTrib.valor = self.det.prod.uCom.valor
self.det.prod.qTrib.valor = self.det.prod.qCom.valor
self.det.prod.vUnTrib.valor = self.det.prod.vUnCom.valor
self.det.prod.vFrete.valor = str("%.2f" % invoice_line.freight_value)
self.det.prod.vSeg.valor = str("%.2f" % invoice_line.insurance_value)
self.det.prod.vDesc.valor = str("%.2f" % invoice_line.discount_value)
self.det.prod.vOutro.valor = str(
"%.2f" % invoice_line.other_costs_value)
self.det.prod.xPed.valor = invoice_line.partner_order or ''
self.det.prod.nItemPed.valor = invoice_line.partner_order_line or ''
self.det.infAdProd.valor = invoice_line.fiscal_comment or ''
#
# Produto entra no total da NF-e
#
self.det.prod.indTot.valor = 1
if invoice_line.product_type == 'product':
# ICMS
if invoice_line.icms_cst_id.code > 100:
self.det.imposto.ICMS.CSOSN.valor = (
invoice_line.icms_cst_id.code)
self.det.imposto.ICMS.pCredSN.valor = str(
"%.2f" % invoice_line.icms_percent)
self.det.imposto.ICMS.vCredICMSSN.valor = str(
"%.2f" % invoice_line.icms_value)
self.det.imposto.ICMS.orig.valor = invoice_line.icms_origin or ''
self.det.imposto.ICMS.CST.valor = invoice_line.icms_cst_id.code
self.det.imposto.ICMS.modBC.valor = invoice_line.icms_base_type
self.det.imposto.ICMS.vBC.valor = str(
"%.2f" % invoice_line.icms_base)
self.det.imposto.ICMS.pRedBC.valor = str(
"%.2f" % invoice_line.icms_percent_reduction)
self.det.imposto.ICMS.pICMS.valor = str(
"%.2f" % invoice_line.icms_percent)
self.det.imposto.ICMS.vICMS.valor = str(
"%.2f" % invoice_line.icms_value)
self.det.imposto.ICMS.motDesICMS.valor = (
invoice_line.icms_relief_id.code or '')
# ICMS ST
self.det.imposto.ICMS.modBCST.valor = (
invoice_line.icms_st_base_type)
self.det.imposto.ICMS.pMVAST.valor = str(
"%.2f" % invoice_line.icms_st_mva)
self.det.imposto.ICMS.pRedBCST.valor = str(
"%.2f" % invoice_line.icms_st_percent_reduction)
self.det.imposto.ICMS.vBCST.valor = str(
"%.2f" % invoice_line.icms_st_base)
self.det.imposto.ICMS.pICMSST.valor = str(
"%.2f" % invoice_line.icms_st_percent)
self.det.imposto.ICMS.vICMSST.valor = str(
"%.2f" % invoice_line.icms_st_value)
# Informação do ICMS Interestadual nas vendas para consumidor final
self.det.imposto.ICMSUFDest.vBCUFDest.valor = str(
"%.2f" % invoice_line.icms_dest_base)
self.det.imposto.ICMSUFDest.pFCPUFDest.valor = str(
"%.2f" % invoice_line.icms_fcp_percent)
self.det.imposto.ICMSUFDest.pICMSUFDest.valor = str(
"%.2f" % invoice_line.icms_dest_percent)
self.det.imposto.ICMSUFDest.pICMSInter.valor = str(
"%.2f" % invoice_line.icms_origin_percent)
self.det.imposto.ICMSUFDest.pICMSInterPart.valor = str(
"%.2f" % invoice_line.icms_part_percent)
self.det.imposto.ICMSUFDest.vFCPUFDest.valor = str(
"%.2f" % invoice_line.icms_fcp_value)
self.det.imposto.ICMSUFDest.vICMSUFDest.valor = str(
"%.2f" % invoice_line.icms_dest_value)
self.det.imposto.ICMSUFDest.vICMSUFRemet.valor = str(
"%.2f" % invoice_line.icms_origin_value)
# IPI
self.det.imposto.IPI.CST.valor = invoice_line.ipi_cst_id.code
if invoice_line.ipi_type == 'percent' or '':
self.det.imposto.IPI.vBC.valor = str(
"%.2f" % invoice_line.ipi_base)
self.det.imposto.IPI.pIPI.valor = str(
"%.2f" % invoice_line.ipi_percent)
if invoice_line.ipi_type == 'quantity':
pesol = 0
if invoice_line.product_id:
pesol = invoice_line.product_id.weight_net
self.det.imposto.IPI.qUnid.valor = str(
"%.2f" % invoice_line.quantity * pesol)
self.det.imposto.IPI.vUnid.valor = str(
"%.2f" % invoice_line.ipi_percent)
self.det.imposto.IPI.vIPI.valor = str(
"%.2f" % invoice_line.ipi_value)
self.det.imposto.IPI.cEnq.valor = str(
invoice_line.ipi_guideline_id.code or '999').zfill(3)
else:
# ISSQN
self.det.imposto.ISSQN.vBC.valor = str(
"%.2f" % invoice_line.issqn_base)
self.det.imposto.ISSQN.vAliq.valor = str(
"%.2f" % invoice_line.issqn_percent)
self.det.imposto.ISSQN.vISSQN.valor = str(
"%.2f" % invoice_line.issqn_value)
self.det.imposto.ISSQN.cMunFG.valor = ('%s%s') % (
invoice.partner_id.state_id.ibge_code,
invoice.partner_id.l10n_br_city_id.ibge_code)
self.det.imposto.ISSQN.cListServ.valor = punctuation_rm(
invoice_line.service_type_id.code or '')
self.det.imposto.ISSQN.cSitTrib.valor = invoice_line.issqn_type
# PIS
self.det.imposto.PIS.CST.valor = invoice_line.pis_cst_id.code
self.det.imposto.PIS.vBC.valor = str("%.2f" % invoice_line.pis_base)
self.det.imposto.PIS.pPIS.valor = str(
"%.2f" % invoice_line.pis_percent)
self.det.imposto.PIS.vPIS.valor = str("%.2f" % invoice_line.pis_value)
# PISST
self.det.imposto.PISST.vBC.valor = str(
"%.2f" % invoice_line.pis_st_base)
self.det.imposto.PISST.pPIS.valor = str(
"%.2f" % invoice_line.pis_st_percent)
self.det.imposto.PISST.qBCProd.valor = ''
self.det.imposto.PISST.vAliqProd.valor = ''
self.det.imposto.PISST.vPIS.valor = str(
"%.2f" % invoice_line.pis_st_value)
# COFINS
self.det.imposto.COFINS.CST.valor = invoice_line.cofins_cst_id.code
self.det.imposto.COFINS.vBC.valor = str(
"%.2f" % invoice_line.cofins_base)
self.det.imposto.COFINS.pCOFINS.valor = str(
"%.2f" % invoice_line.cofins_percent)
self.det.imposto.COFINS.vCOFINS.valor = str(
"%.2f" % invoice_line.cofins_value)
# COFINSST
self.det.imposto.COFINSST.vBC.valor = str(
"%.2f" % invoice_line.cofins_st_base)
self.det.imposto.COFINSST.pCOFINS.valor = str(
"%.2f" % invoice_line.cofins_st_percent)
self.det.imposto.COFINSST.qBCProd.valor = ''
self.det.imposto.COFINSST.vAliqProd.valor = ''
self.det.imposto.COFINSST.vCOFINS.valor = str(
"%.2f" % invoice_line.cofins_st_value)
# II
self.det.imposto.II.vBC.valor = str("%.2f" % invoice_line.ii_base)
self.det.imposto.II.vDespAdu.valor = str(
"%.2f" % invoice_line.ii_customhouse_charges)
self.det.imposto.II.vII.valor = str("%.2f" % invoice_line.ii_value)
self.det.imposto.II.vIOF.valor = str("%.2f" % invoice_line.ii_iof)
self.det.imposto.vTotTrib.valor = str(
"%.2f" % invoice_line.total_taxes)
def _di(self, invoice_line_di):
self.di.nDI.valor = invoice_line_di.name
self.di.dDI.valor = invoice_line_di.date_registration or ''
self.di.xLocDesemb.valor = invoice_line_di.location
self.di.UFDesemb.valor = invoice_line_di.state_id.code or ''
self.di.dDesemb.valor = invoice_line_di.date_release or ''
self.di.cExportador.valor = invoice_line_di.exporting_code
def _addition(self, invoice_line_di):
self.di_line.nAdicao.valor = invoice_line_di.name
self.di_line.nSeqAdic.valor = invoice_line_di.sequence
self.di_line.cFabricante.valor = invoice_line_di.manufacturer_code
self.di_line.vDescDI.valor = str(
"%.2f" % invoice_line_di.amount_discount)
def _encashment_data(self, invoice, move_line):
"""Dados de Cobrança"""
if invoice.type in ('out_invoice', 'in_refund'):
value = move_line.debit
else:
value = move_line.credit
self.dup.nDup.valor = move_line.name
self.dup.dVenc.valor = (move_line.date_maturity or
invoice.date_due or
invoice.date_invoice)
self.dup.vDup.valor = str("%.2f" % value)
def _carrier_data(self, invoice):
"""Dados da Transportadora e veiculo"""
self.nfe.infNFe.transp.modFrete.valor = (
invoice.incoterm and
invoice.incoterm.freight_responsibility or '9')
if invoice.carrier_id:
if invoice.carrier_id.partner_id.is_company:
self.nfe.infNFe.transp.transporta.CNPJ.valor = \
punctuation_rm(
invoice.carrier_id.partner_id.cnpj_cpf or '')
else:
self.nfe.infNFe.transp.transporta.CPF.valor = \
punctuation_rm(
invoice.carrier_id.partner_id.cnpj_cpf or '')
self.nfe.infNFe.transp.transporta.xNome.valor = (
invoice.carrier_id.partner_id.legal_name[:60] or '')
self.nfe.infNFe.transp.transporta.IE.valor = punctuation_rm(
invoice.carrier_id.partner_id.inscr_est)
self.nfe.infNFe.transp.transporta.xEnder.valor = (
invoice.carrier_id.partner_id.street or '')
self.nfe.infNFe.transp.transporta.xMun.valor = (
invoice.carrier_id.partner_id.l10n_br_city_id.name or '')
self.nfe.infNFe.transp.transporta.UF.valor = (
invoice.carrier_id.partner_id.state_id.code or '')
if invoice.vehicle_id:
self.nfe.infNFe.transp.veicTransp.placa.valor = (
invoice.vehicle_id.plate or '')
self.nfe.infNFe.transp.veicTransp.UF.valor = (
invoice.vehicle_id.plate.state_id.code or '')
self.nfe.infNFe.transp.veicTransp.RNTC.valor = (
invoice.vehicle_id.rntc_code or '')
def _weight_data(self, invoice):
"""Campos do Transporte da NF-e Bloco 381"""
self.vol.qVol.valor = invoice.number_of_packages
self.vol.esp.valor = invoice.kind_of_packages or ''
self.vol.marca.valor = invoice.brand_of_packages or ''
self.vol.nVol.valor = invoice.notation_of_packages or ''
self.vol.pesoL.valor = str("%.2f" % invoice.weight_net)
self.vol.pesoB.valor = str("%.2f" % invoice.weight)
def _additional_information(self, invoice):
"""Informações adicionais"""
self.nfe.infNFe.infAdic.infAdFisco.valor = invoice.fiscal_comment or ''
self.nfe.infNFe.infAdic.infCpl.valor = invoice.comment or ''
def _total(self, invoice):
"""Totais"""
self.nfe.infNFe.total.ICMSTot.vBC.valor = str(
"%.2f" % invoice.icms_base)
self.nfe.infNFe.total.ICMSTot.vICMS.valor = str(
"%.2f" % invoice.icms_value)
self.nfe.infNFe.total.ICMSTot.vFCPUFDest.valor = str(
"%.2f" % invoice.icms_fcp_value)
self.nfe.infNFe.total.ICMSTot.vICMSUFDest.valor = str(
"%.2f" % invoice.icms_dest_value)
self.nfe.infNFe.total.ICMSTot.vICMSUFRemet.valor = str(
"%.2f" % invoice.icms_origin_value)
self.nfe.infNFe.total.ICMSTot.vBCST.valor = str(
"%.2f" % invoice.icms_st_base)
self.nfe.infNFe.total.ICMSTot.vST.valor = str(
"%.2f" % invoice.icms_st_value)
self.nfe.infNFe.total.ICMSTot.vProd.valor = str(
"%.2f" % invoice.amount_gross)
self.nfe.infNFe.total.ICMSTot.vFrete.valor = str(
"%.2f" % invoice.amount_freight)
self.nfe.infNFe.total.ICMSTot.vSeg.valor = str(
"%.2f" % invoice.amount_insurance)
self.nfe.infNFe.total.ICMSTot.vDesc.valor = str(
"%.2f" % invoice.amount_discount)
self.nfe.infNFe.total.ICMSTot.vII.valor = str(
"%.2f" % invoice.ii_value)
self.nfe.infNFe.total.ICMSTot.vIPI.valor = str(
"%.2f" % invoice.ipi_value)
self.nfe.infNFe.total.ICMSTot.vPIS.valor = str(
"%.2f" % invoice.pis_value)
self.nfe.infNFe.total.ICMSTot.vCOFINS.valor = str(
"%.2f" % invoice.cofins_value)
self.nfe.infNFe.total.ICMSTot.vOutro.valor = str(
"%.2f" % invoice.amount_costs)
self.nfe.infNFe.total.ICMSTot.vNF.valor = str(
"%.2f" % invoice.amount_total)
self.nfe.infNFe.total.ICMSTot.vTotTrib.valor = str(
"%.2f" % invoice.amount_total_taxes)
def _export(self, invoice):
"Informações de exportação"
self.nfe.infNFe.exporta.UFEmbarq.valor = (
invoice.shipping_state_id.code or '')
self.nfe.infNFe.exporta.xLocEmbarq.valor = (
invoice.shipping_location or '')
[documentos] def get_NFe(self):
try:
from pysped.nfe.leiaute import NFe_200
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return NFe_200()
def _get_NFRef(self):
try:
from pysped.nfe.leiaute import NFRef_200
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return NFRef_200()
def _get_Det(self):
try:
from pysped.nfe.leiaute import Det_200
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return Det_200()
def _get_DI(self):
try:
from pysped.nfe.leiaute import DI_200
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return DI_200()
def _get_Addition(self):
try:
from pysped.nfe.leiaute import Adi_200
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return Adi_200()
def _get_Vol(self):
try:
from pysped.nfe.leiaute import Vol_200
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return Vol_200()
def _get_Dup(self):
try:
from pysped.nfe.leiaute import Dup_200
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return Dup_200()
[documentos] def get_xml(self, cr, uid, ids, nfe_environment, context=None):
""""""
result = []
for nfe in self._serializer(cr, uid, ids, nfe_environment, context):
result.append({'key': nfe.infNFe.Id.valor, 'nfe': nfe.get_xml()})
return result
[documentos] def set_xml(self, nfe_string, context=None):
""""""
nfe = self.get_NFe()
nfe.set_xml(nfe_string)
return nfe
[documentos]class NFe310(NFe200):
def __init__(self):
super(NFe310, self).__init__()
def _nfe_identification(self, invoice, company, nfe_environment):
super(NFe310, self)._nfe_identification(
invoice, company, nfe_environment)
self.nfe.infNFe.ide.idDest.valor = (
invoice.fiscal_position.cfop_id.id_dest or '')
self.nfe.infNFe.ide.indFinal.valor = invoice.ind_final or ''
self.nfe.infNFe.ide.indPres.valor = invoice.ind_pres or ''
self.nfe.infNFe.ide.dhEmi.valor = datetime.strptime(
invoice.date_hour_invoice, '%Y-%m-%d %H:%M:%S')
self.nfe.infNFe.ide.dhSaiEnt.valor = datetime.strptime(
invoice.date_in_out, '%Y-%m-%d %H:%M:%S')
self.aut_xml = self._get_AutXML()
self.aut_xml.CNPJ.valor = punctuation_rm(
invoice.company_id.accountant_cnpj_cpf)
self.nfe.infNFe.autXML.append(self.aut_xml)
def _receiver(self, invoice, company, nfe_environment):
super(NFe310, self)._receiver(
invoice, company, nfe_environment)
if invoice.partner_id.country_id.id != \
invoice.company_id.country_id.id:
self.nfe.infNFe.dest.idEstrangeiro.valor = punctuation_rm(
invoice.partner_id.cnpj_cpf)
def _di(self, invoice_line_di):
super(NFe310, self)._di(invoice_line_di)
self.di.tpViaTransp.valor = invoice_line_di.type_transportation or ''
self.di.vAFRMM.valor = str("%.2f" % invoice_line_di.afrmm_value)
self.di.tpIntermedio.valor = invoice_line_di.type_import or ''
self.di.CNPJ.valor = invoice_line_di.exporting_code or ''
self.di.UFTerceiro.valor = (
invoice_line_di.thirdparty_state_id.code or '')
def _export(self, invoice):
"Informações de exportação"
self.nfe.infNFe.exporta.UFSaidaPais.valor = (
invoice.shipping_state_id.code or '')
self.nfe.infNFe.exporta.xLocExporta.valor = (
invoice.shipping_location or '')
self.nfe.infNFe.exporta.xLocDespacho.valor = (
invoice.expedition_location or '')
[documentos] def get_NFe(self):
try:
from pysped.nfe.leiaute import NFe_310
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return NFe_310()
def _get_NFRef(self):
try:
from pysped.nfe.leiaute import NFRef_310
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return NFRef_310()
def _get_Det(self):
try:
from pysped.nfe.leiaute import Det_310
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return Det_310()
def _get_Dup(self):
try:
from pysped.nfe.leiaute import Dup_310
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return Dup_310()
def _get_DI(self):
try:
from pysped.nfe.leiaute import DI_310
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return DI_310()
def _get_AutXML(self):
try:
from pysped.nfe.leiaute import AutXML_310
except ImportError:
raise UserError(
_(u'Erro!'), _(u"Biblioteca PySPED não instalada!"))
return AutXML_310()