# -*- coding: utf-8 -*-
# Copyright (C) 2009 Renato Lima - Akretion
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from datetime import datetime
from unicodedata import normalize
import pytz
from openerp import SUPERUSER_ID
from openerp import pooler
from openerp.addons.l10n_br_base.tools.misc import punctuation_rm
[documentos]def nfe_export(cr, uid, ids, nfe_environment='1',
nfe_version='2.00', context=False):
# StrFile = ''
StrNF = 'NOTA FISCAL|%s|\n' % len(ids)
StrFile = StrNF
pool = pooler.get_pool(cr.dbname)
nfes = []
for inv in pool.get('account.invoice').browse(
cr, uid, ids, context={'lang': 'pt_BR'}):
# Endereço do company
company_addr = pool.get('res.partner').address_get(
cr, uid, [inv.company_id.partner_id.id], ['default'])
company_addr_default = pool.get('res.partner').browse(
cr, uid, [company_addr['default']], context={'lang': 'pt_BR'})[0]
StrA = 'A|%s|%s|\n' % (nfe_version, '')
StrFile += StrA
StrRegB = {
'cUF': company_addr_default.state_id.ibge_code,
'cNF': '',
'NatOp': (normalize('NFKD',
unicode(inv.cfop_ids[0].small_name or ''))
.encode('ASCII', 'ignore')),
'indPag': inv.payment_term and inv.payment_term.indPag or '0',
'mod': inv.fiscal_document_id.code,
'serie': inv.document_serie_id.code,
'nNF': inv.internal_number or '',
'hSaiEnt': '',
'tpNF': '',
'cMunFG': ('%s%s') % (company_addr_default.state_id.ibge_code,
(company_addr_default
.l10n_br_city_id.ibge_code)),
'TpImp': '1',
'TpEmis': '1',
'cDV': '',
'tpAmb': nfe_environment,
'finNFe': inv.nfe_purpose,
'procEmi': '0',
# 'VerProc': '2.2.26',
'dhCont': '',
'xJust': '',
}
if inv.cfop_ids[0].type in ("input"):
StrRegB['tpNF'] = '0'
else:
StrRegB['tpNF'] = '1'
if nfe_version == '3.10':
# Capturar a timezone do usuario
user_pool = inv.pool.get('res.users')
user = user_pool.browse(cr, SUPERUSER_ID, uid)
tz = pytz.timezone(user.partner_id.tz) or pytz.utc
StrRegB['dhEmi'] = str(pytz.utc.localize(datetime.strptime(
inv.date_hour_invoice, '%Y-%m-%d %H:%M:%S'))
.astimezone(tz)).replace(' ', 'T') or ''
StrRegB['dhSaiEnt'] = str(pytz.utc.localize(datetime.strptime(
inv.date_in_out, '%Y-%m-%d %H:%M:%S'))
.astimezone(tz)).replace(' ', 'T') or ''
StrRegB['idDest'] = inv.fiscal_position.cfop_id.id_dest or ''
StrRegB['indFinal'] = inv.ind_final or ''
StrRegB['indPres'] = inv.ind_pres or ''
StrRegB['VerProc'] = '3.10.18'
# Modificado
StrB = 'B|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\
|%s|%s|%s|%s|%s|%s|\n' % (
StrRegB['cUF'], StrRegB['cNF'], StrRegB[
'NatOp'], StrRegB['indPag'], StrRegB['mod'],
StrRegB['serie'], StrRegB['nNF'], StrRegB[
'dhEmi'], StrRegB['dhSaiEnt'], StrRegB['hSaiEnt'],
StrRegB['tpNF'], StrRegB['idDest'], StrRegB[
'cMunFG'], StrRegB['TpImp'], StrRegB['TpEmis'],
StrRegB['cDV'], StrRegB['tpAmb'], StrRegB[
'finNFe'], StrRegB['indFinal'], StrRegB['indPres'],
StrRegB['procEmi'], StrRegB['VerProc'], StrRegB['dhCont'],
StrRegB['xJust'])
else:
StrRegB['dEmi'] = inv.date_invoice or ''
StrRegB['dSaiEnt'] = str(datetime.strptime(
inv.date_in_out, '%Y-%m-%d %H:%M:%S').date()) or ''
StrRegB['VerProc'] = '2.2.26'
StrB = 'B|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\
|%s|%s|%s|\n' % (
StrRegB['cUF'], StrRegB['cNF'], StrRegB[
'NatOp'], StrRegB['indPag'],
StrRegB['mod'], StrRegB['serie'], StrRegB[
'nNF'], StrRegB['dEmi'], StrRegB['dSaiEnt'],
StrRegB['hSaiEnt'], StrRegB['tpNF'], StrRegB[
'cMunFG'], StrRegB['TpImp'], StrRegB['TpEmis'],
StrRegB['cDV'], StrRegB['tpAmb'], StrRegB[
'finNFe'], StrRegB['procEmi'], StrRegB['VerProc'],
StrRegB['dhCont'], StrRegB['xJust'])
StrFile += StrB
for inv_related in inv.fiscal_document_related_ids:
if inv_related.document_type == 'nf':
StrRegB14 = {
'cUF': '%s' % inv_related.state_id and
inv_related.state_id.ibge_code or '',
'AAMM': datetime.strptime(
inv_related.date,
'%Y-%m-%d').strftime('%y%m') or '',
'CNPJ': punctuation_rm(
inv_related.cnpj_cpf),
'Mod': inv_related.fiscal_document_id and
inv_related.fiscal_document_id.code or '',
'serie': inv_related.serie or '',
'nNF': punctuation_rm(
inv_related.internal_number),
}
StrB14 = 'B14|%s|%s|%s|%s|%s|%s|\n' % (StrRegB14['cUF'],
StrRegB14['AAMM'],
StrRegB14['CNPJ'],
StrRegB14['CNPJ'],
StrRegB14['serie'],
StrRegB14['nNF'])
StrFile += StrB14
elif inv_related.document_type == 'nfrural':
StrRegB20a = {
'cUF': '%s' % inv_related.state_id and
inv_related.state_id.ibge_code or '',
'AAMM': datetime.strptime(
inv_related.date,
'%Y-%m-%d').strftime('%y%m') or '',
'IE': punctuation_rm(
inv_related.inscr_est),
'mod': inv_related.fiscal_document_id and
inv_related.fiscal_document_id.code or '',
'serie': inv_related.serie or '',
'nNF': punctuation_rm(
inv_related.internal_number),
}
StrB20a = 'B20a|%s|%s|%s|%s|%s|%s|\n' % (StrRegB20a['cUF'],
StrRegB20a['AAMM'],
StrRegB20a['IE'],
StrRegB20a['mod'],
StrRegB20a['serie'],
StrRegB20a['nNF'])
StrFile += StrB20a
if inv_related.cpfcnpj_type == 'cnpj':
StrRegB20d = {
'CNPJ': punctuation_rm(inv_related.cnpj_cpf)
}
StrB20d = 'B20d|%s|\n' % StrRegB20d['CNPJ']
StrFile += StrB20d
else:
StrRegB20e = {
'CPF': punctuation_rm(inv_related.cnpj_cpf)
}
StrB20e = 'B20e|%s|\n' % StrRegB20e['CPF']
StrFile += StrB20e
elif inv_related.document_type == 'nfe':
StrRegBA02 = {
'refNFe': inv_related.access_key or '',
}
StrBA02 = 'BA02|%s|\n' % StrRegBA02['refNFe']
StrFile += StrBA02
elif inv_related.document_type == 'cte':
StrRegB20i = {
'refCTe': inv_related.access_key or '',
}
StrB20i = 'B20i|%s|\n' % StrRegB20i['refCTe']
StrFile += StrB20i
elif inv_related.document_type == 'cf':
StrRegB20j = {
'mod': inv_related.fiscal_document_id and
inv_related.fiscal_document_id.code or '',
'nECF': inv_related.internal_number,
'nCOO': inv_related.serie,
}
StrB20j = 'B20j|%s|%s|%s|\n' % (StrRegB20j['mod'], StrRegB20j[
'nECF'], StrRegB20j['nCOO'])
StrFile += StrB20j
StrRegC = {
'XNome': normalize(
'NFKD',
unicode(inv.company_id.partner_id.legal_name or '')).encode(
'ASCII', 'ignore'),
'XFant': normalize(
'NFKD',
unicode(inv.company_id.partner_id.name or '')).encode(
'ASCII', 'ignore'),
'IE': punctuation_rm(inv.company_id.partner_id.inscr_est),
'IEST': '',
'IM': punctuation_rm(inv.company_id.partner_id.inscr_mun),
'CNAE': punctuation_rm(inv.company_id.cnae_main_id.code),
'CRT': inv.company_id.fiscal_type or '', }
# TODO - Verificar, pois quando e informado do CNAE ele exige que a
# inscricao municipal, parece um bug do emissor da NFE
if not inv.company_id.partner_id.inscr_mun:
StrRegC['CNAE'] = ''
StrC = 'C|%s|%s|%s|%s|%s|%s|%s|\n' % (StrRegC['XNome'],
StrRegC['XFant'],
StrRegC['IE'],
StrRegC['IEST'],
StrRegC['IM'],
StrRegC['CNAE'],
StrRegC['CRT'])
StrFile += StrC
if inv.company_id.partner_id.is_company:
StrC02 = 'C02|%s|\n' % (punctuation_rm(
inv.company_id.partner_id.cnpj_cpf))
else:
StrC02 = 'C02a|%s|\n' % (punctuation_rm(
inv.company_id.partner_id.cnpj_cpf))
StrFile += StrC02
address_company_bc_code = ''
if company_addr_default.country_id.bc_code:
address_company_bc_code = (company_addr_default
.country_id.bc_code[1:])
StrRegC05 = {
'XLgr': normalize(
'NFKD',
unicode(
company_addr_default.street or '')).encode(
'ASCII',
'ignore'),
'Nro': company_addr_default.number or '',
'Cpl': normalize(
'NFKD',
unicode(
company_addr_default.street2 or '')).encode(
'ASCII',
'ignore'),
'Bairro': normalize(
'NFKD',
unicode(
company_addr_default.district or 'Sem Bairro')).encode(
'ASCII',
'ignore'),
'CMun': '%s%s' % (company_addr_default.state_id.ibge_code,
company_addr_default.l10n_br_city_id.ibge_code),
'XMun': normalize(
'NFKD',
unicode(
company_addr_default.l10n_br_city_id.name or '')).encode(
'ASCII',
'ignore'),
'UF': company_addr_default.state_id.code or '',
'CEP': punctuation_rm(company_addr_default.zip),
'cPais': address_company_bc_code or '',
'xPais': normalize(
'NFKD',
unicode(
company_addr_default.country_id.name or '')).encode(
'ASCII',
'ignore'),
'fone': punctuation_rm(
company_addr_default.phone or '').replace(
' ',
''),
}
StrC05 = 'C05|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegC05['XLgr'], StrRegC05['Nro'], StrRegC05[
'Cpl'], StrRegC05['Bairro'],
StrRegC05['CMun'], StrRegC05[
'XMun'], StrRegC05['UF'], StrRegC05['CEP'],
StrRegC05['cPais'], StrRegC05['xPais'], StrRegC05['fone'])
StrFile += StrC05
partner_bc_code = ''
address_invoice_state_code = ''
address_invoice_city = ''
UFEmbarq = ''
XLocEmbarq = ''
partner_cep = ''
if inv.partner_id.country_id.bc_code:
partner_bc_code = inv.partner_id.country_id.bc_code[1:]
if inv.partner_id.country_id.id != company_addr_default.country_id.id:
address_invoice_state_code = 'EX'
address_invoice_city = 'Exterior'
address_invoice_city_code = '9999999'
UFEmbarq = company_addr_default.state_id.code
XLocEmbarq = company_addr_default.city
partner_cep = ''
else:
address_invoice_state_code = inv.partner_id.state_id.code
address_invoice_city = normalize(
'NFKD', unicode(
inv.partner_id.l10n_br_city_id.name or '')).encode(
'ASCII', 'ignore')
address_invoice_city_code = ('%s%s') % (
inv.partner_id.state_id.ibge_code,
inv.partner_id.l10n_br_city_id.ibge_code)
partner_cep = punctuation_rm(inv.partner_id.zip)
# Se o ambiente for de teste deve ser escrito na razão do destinatário
if nfe_environment == '2':
xNome = 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO'\
' - SEM VALOR FISCAL'
else:
xNome = normalize('NFKD', unicode(
inv.partner_id.legal_name or '')).encode('ASCII', 'ignore')
StrRegE = {
'xNome': xNome,
'IE': punctuation_rm(inv.partner_id.inscr_est),
'ISUF': '',
'email': inv.partner_id.email or '',
}
# Adicionado
if nfe_version == '3.10':
StrRegE['indIEDest'] = inv.cfop_ids[0].id_dest
StrRegE['IM'] = StrRegC['IM']
StrE = 'E|%s|%s|%s|%s|%s|%s|\n' % (StrRegE['xNome'],
StrRegE['indIEDest'],
StrRegE['IE'],
StrRegE['ISUF'],
StrRegE['IM'],
StrRegE['email'])
else:
StrE = 'E|%s|%s|%s|%s|\n' % (StrRegE['xNome'], StrRegE[
'IE'], StrRegE['ISUF'], StrRegE['email'])
StrFile += StrE
if inv.partner_id.is_company:
StrE0 = 'E02|%s|\n' % (punctuation_rm(inv.partner_id.cnpj_cpf))
else:
StrE0 = 'E03|%s|\n' % (punctuation_rm(inv.partner_id.cnpj_cpf))
StrFile += StrE0
StrRegE05 = {
'xLgr': (normalize('NFKD', unicode(inv.partner_id.street or ''))
.encode('ASCII', 'ignore')),
'nro': (normalize('NFKD', unicode(inv.partner_id.number or ''))
.encode('ASCII', 'ignore')),
'xCpl': (punctuation_rm(normalize(
'NFKD', unicode(inv.partner_id.street2 or ''))
.encode('ASCII', 'ignore'))),
'xBairro': (normalize(
'NFKD', unicode(inv.partner_id.district or 'Sem Bairro'))
.encode('ASCII', 'ignore')),
'cMun': address_invoice_city_code,
'xMun': address_invoice_city,
'UF': address_invoice_state_code,
'CEP': partner_cep,
'cPais': partner_bc_code,
'xPais': (normalize(
'NFKD', unicode(inv.partner_id.country_id.name or ''))
.encode('ASCII', 'ignore')),
# 'fone': re.sub('[%s]' % re.escape(string.punctuation), '',
# str(inv.partner_id.phone or '').replace(' ', '')),
'fone': (punctuation_rm(inv.partner_id.phone or '')
.replace(' ', '')),
}
StrE05 = 'E05|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegE05['xLgr'], StrRegE05['nro'], StrRegE05[
'xCpl'], StrRegE05['xBairro'],
StrRegE05['cMun'], StrRegE05[
'xMun'], StrRegE05['UF'], StrRegE05['CEP'],
StrRegE05['cPais'], StrRegE05['xPais'], StrRegE05['fone'],)
StrFile += StrE05
if inv.partner_shipping_id:
if inv.partner_id.id != inv.partner_shipping_id.id:
StrRegG = {
'XLgr': (normalize(
'NFKD', unicode(inv.partner_shipping_id.street or ''))
.encode('ASCII', 'ignore')),
'Nro': (normalize(
'NFKD',
unicode(inv.partner_shipping_id.number or ''))
.encode('ASCII', 'ignore')),
'XCpl': (punctuation_rm(normalize(
'NFKD', unicode(inv.partner_shipping_id.street2 or ''))
.encode('ASCII', 'ignore'))),
'XBairro': punctuation_rm(normalize(
'NFKD', unicode(inv.partner_shipping_id.district or
'Sem Bairro')).encode('ASCII',
'ignore')),
'CMun': ('%s%s') % (
inv.partner_shipping_id.state_id.ibge_code,
inv.partner_shipping_id.l10n_br_city_id.ibge_code),
'XMun': (normalize(
'NFKD',
unicode((inv.partner_shipping_id
.l10n_br_city_id.name) or ''))
.encode('ASCII', 'ignore')),
'UF': inv.partner_shipping_id.state_id.code,
}
StrG = 'G|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegG['XLgr'], StrRegG['Nro'], StrRegG[
'XCpl'], StrRegG['XBairro'], StrRegG['CMun'],
StrRegG['XMun'],
StrRegG['UF'])
StrFile += StrG
if inv.partner_id.is_company:
# StrG0 = 'G02|%s|\n' % (
# re.sub('[%s]' % re.escape(string.punctuation), '',
# inv.partner_id.cnpj_cpf or ''))
StrG0 = 'G02|%s|\n' % punctuation_rm(
inv.partner_id.cnpj_cpf)
else:
# StrG0 = 'G02a|%s|\n' % (
# re.sub('[%s]' % re.escape(string.punctuation), '',
# inv.partner_id.cnpj_cpf or ''))
StrG0 = 'G02a|%s|\n' % punctuation_rm(
inv.partner_id.cnpj_cpf)
StrFile += StrG0
i = 0
for inv_line in inv.invoice_line:
i += 1
# FIXME
if inv_line.freight_value:
freight_value = str("%.2f" % inv_line.freight_value)
else:
freight_value = ''
if inv_line.insurance_value:
insurance_value = str("%.2f" % inv_line.insurance_value)
else:
insurance_value = ''
if inv_line.other_costs_value:
other_costs_value = str("%.2f" % inv_line.other_costs_value)
else:
other_costs_value = ''
if inv_line.discount_value:
discount_value = str("%.2f" % inv_line.discount_value)
else:
discount_value = ''
StrH = 'H|%s||\n' % (i)
StrFile += StrH
CProd = ''
XProd = ''
if inv_line.product_id.code:
CProd = inv_line.product_id.code
XProd = normalize('NFKD', unicode(
inv_line.product_id.name or '')).encode('ASCII', 'ignore')
else:
CProd = unicode(i).strip().rjust(4, u'0')
XProd = normalize('NFKD', unicode(
inv_line.name or '')).encode('ASCII', 'ignore')
StrRegI = {
'CProd': CProd,
'CEAN': inv_line.product_id.ean13 or '',
'XProd': XProd,
'EXTIPI': '',
'CFOP': inv_line.cfop_id.code,
'UCom': normalize(
'NFKD',
unicode(
inv_line.uos_id.name or '',
)).encode(
'ASCII',
'ignore'),
'QCom': str(
"%.4f" %
inv_line.quantity),
'VUnCom': str(
"%.7f" %
inv_line.price_unit),
'VProd': str(
"%.2f" %
inv_line.price_gross),
'CEANTrib': inv_line.product_id.ean13 or '',
'UTrib': normalize(
'NFKD',
unicode(
inv_line.uos_id.name or '',
)).encode(
'ASCII',
'ignore'),
'QTrib': str(
"%.4f" %
inv_line.quantity),
'VUnTrib': str(
"%.7f" %
inv_line.price_unit),
'VFrete': freight_value,
'VSeg': insurance_value,
'VDesc': discount_value,
'vOutro': other_costs_value,
'indTot': '1',
'xPed': '',
'nItemPed': '',
'nFCI': inv_line.fci or '',
}
StrRegI['NCM'] = punctuation_rm(
inv_line.fiscal_classification_id.name)
if nfe_version == '3.10':
StrRegI['NVE'] = ''
StrRegI['nFCI'] = ''
StrI = 'I|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s'\
'|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegI['CProd'], StrRegI['CEAN'],
StrRegI['XProd'], StrRegI['NCM'],
StrRegI['NVE'], StrRegI['EXTIPI'],
StrRegI['CFOP'], StrRegI['UCom'],
StrRegI['QCom'], StrRegI['VUnCom'],
StrRegI['VProd'], StrRegI['CEANTrib'],
StrRegI['UTrib'], StrRegI['QTrib'],
StrRegI['VUnTrib'], StrRegI['VFrete'],
StrRegI['VSeg'], StrRegI['VDesc'],
StrRegI['vOutro'], StrRegI['indTot'],
StrRegI['xPed'], StrRegI['nItemPed'],
StrRegI['nFCI'])
else:
StrI = 'I|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s'\
'|%s|%s|%s|%s|%s|\n' % (
StrRegI['CProd'], StrRegI['CEAN'],
StrRegI['XProd'], StrRegI['NCM'],
StrRegI['EXTIPI'], StrRegI['CFOP'],
StrRegI['UCom'], StrRegI['QCom'],
StrRegI['VUnCom'], StrRegI['VProd'],
StrRegI['CEANTrib'], StrRegI['UTrib'],
StrRegI['QTrib'], StrRegI['VUnTrib'],
StrRegI['VFrete'], StrRegI['VSeg'],
StrRegI['VDesc'], StrRegI['vOutro'],
StrRegI['indTot'], StrRegI['xPed'],
StrRegI['nItemPed'], StrRegI['nFCI'])
StrFile += StrI
for inv_di in inv_line.import_declaration_ids:
StrRegI18 = {
'NDI': inv_di.name,
'DDI': inv_di.date_registration or '',
'XLocDesemb': inv_di.location,
'UFDesemb': inv_di.state_id.code or '',
'DDesemb': inv_di.date_release or '',
'tpViaTransp': inv_di.type_transportation or '',
'vAFRMM': str("%.2f" % inv_di.afrmm_value),
'tpIntermedio': inv_di.type_import or '',
'CNPJ': inv_di.exporting_code or '',
'UFTerceiro': inv_di.thirdparty_state_id.code or '',
'CExportador': inv_di.exporting_code,
}
StrI18 = 'I18|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegI18['NDI'],
StrRegI18['DDI'],
StrRegI18['XLocDesemb'],
StrRegI18['UFDesemb'],
StrRegI18['DDesemb'],
StrRegI18['tpViaTransp'],
StrRegI18['vAFRMM'],
StrRegI18['tpIntermedio'],
StrRegI18['CNPJ'],
StrRegI18['UFTerceiro'],
StrRegI18['CExportador'],
)
StrFile += StrI18
for inv_di_line in inv_di.line_ids:
StrRegI25 = {
'NAdicao': inv_di_line.name,
'NSeqAdic': inv_di_line.sequence,
'CFabricante': inv_di_line.manufacturer_code,
'VDescDI': str("%.2f" % inv_di_line.amount_discount),
}
if StrRegI25['VDescDI'] == '0.00':
StrRegI25['VDescDI'] = ''
StrI25 = 'I25|%s|%s|%s|%s|\n' % (
StrRegI25['NAdicao'],
StrRegI25['NSeqAdic'],
StrRegI25['CFabricante'],
StrRegI25['VDescDI'],
)
StrFile += StrI25
icms_cst = inv_line.icms_cst_id and\
inv_line.icms_cst_id.code or ''
ipi_cst = inv_line.ipi_cst_id and\
inv_line.ipi_cst_id.code or ''
pis_cst = inv_line.pis_cst_id and inv_line.pis_cst_id.code or ''
cofins_cst = inv_line.cofins_cst_id and\
inv_line.cofins_cst_id.code or ''
StrRegStrM = {
'vTotTrib': str("%.2f" % inv_line.total_taxes),
}
StrM = 'M|%s|\n' % (StrRegStrM['vTotTrib'])
StrFile += StrM
StrN = 'N|\n'
StrFile += StrN
# TODO - Fazer alteração para cada tipo de cst ICMS
if inv_line.product_type == 'product':
if icms_cst in ('00',):
StrRegN02 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'ModBC': inv_line.icms_base_type,
'VBC': str("%.2f" % inv_line.icms_base),
'PICMS': str("%.2f" % inv_line.icms_percent),
'VICMS': str("%.2f" % inv_line.icms_value),
}
StrN02 = 'N02|%s|%s|%s|%s|%s|%s|\n' % (
StrRegN02['Orig'], StrRegN02['CST'], StrRegN02[
'ModBC'], StrRegN02['VBC'], StrRegN02['PICMS'],
StrRegN02['VICMS'])
StrFile += StrN02
if icms_cst in ('10',):
StrRegN03 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'ModBC': inv_line.icms_base_type,
'VBC': str("%.2f" % inv_line.icms_base),
'PICMS': str("%.2f" % inv_line.icms_percent),
'VICMS': str("%.2f" % inv_line.icms_value),
'ModBCST': inv_line.icms_st_base_type,
'PMVAST': str("%.2f" % inv_line.icms_st_mva) or '',
'PRedBCST': '',
'VBCST': str("%.2f" % inv_line.icms_st_base),
'PICMSST': str("%.2f" % inv_line.icms_st_percent),
'VICMSST': str("%.2f" % inv_line.icms_st_value),
}
StrN03 = 'N03|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegN03['Orig'], StrRegN03[
'CST'], StrRegN03['ModBC'],
StrRegN03['VBC'], StrRegN03[
'PICMS'], StrRegN03['VICMS'],
StrRegN03['ModBCST'], StrRegN03['PMVAST'],
StrRegN03['PRedBCST'], StrRegN03['VBCST'],
StrRegN03['PICMSST'], StrRegN03['VICMSST'])
StrFile += StrN03
if icms_cst in ('20',):
StrRegN04 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'ModBC': inv_line.icms_base_type,
'PRedBC': str(
"%.2f" %
inv_line.icms_percent_reduction),
'VBC': str(
"%.2f" %
inv_line.icms_base),
'PICMS': str(
"%.2f" %
inv_line.icms_percent),
'VICMS': str(
"%.2f" %
inv_line.icms_value),
}
StrN04 = 'N04|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegN04['Orig'], StrRegN04[
'CST'], StrRegN04['ModBC'],
StrRegN04['PRedBC'], StrRegN04[
'VBC'], StrRegN04['PICMS'],
StrRegN04['VICMS'])
StrFile += StrN04
if icms_cst in ('40', '50'):
StrRegN06 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'vICMS': str("%.2f" % inv_line.icms_value),
'motDesICMS': '9', # FIXME
}
StrN06 = 'N06|%s|%s|%s|%s|\n' % (
StrRegN06['Orig'], StrRegN06[
'CST'], StrRegN06['vICMS'],
StrRegN06['motDesICMS'])
StrFile += StrN06
if icms_cst in ('41',):
StrRegN06 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'vICMS': '',
'motDesICMS': '',
}
StrN06 = 'N06|%s|%s|%s|%s|\n' % (
StrRegN06['Orig'], StrRegN06[
'CST'], StrRegN06['vICMS'],
StrRegN06['motDesICMS'])
StrFile += StrN06
if icms_cst in ('51',):
StrRegN07 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'ModBC': inv_line.icms_base_type,
'PRedBC': str(
"%.2f" %
inv_line.icms_percent_reduction),
'VBC': str(
"%.2f" %
inv_line.icms_base),
'PICMS': str(
"%.2f" %
inv_line.icms_percent),
'VICMS': str(
"%.2f" %
inv_line.icms_value),
}
StrN07 = 'N07|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegN07['Orig'], StrRegN07[
'CST'], StrRegN07['ModBC'],
StrRegN07['PRedBC'], StrRegN07['VBC'],
StrRegN07['PICMS'], StrRegN07['VICMS'])
StrFile += StrN07
if icms_cst in ('60',):
StrRegN08 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'VBCST': str("%.2f" % 0.00),
'VICMSST': str("%.2f" % 0.00),
}
StrN08 = 'N08|%s|%s|%s|%s|\n' % (StrRegN08['Orig'],
StrRegN08['CST'],
StrRegN08['VBCST'],
StrRegN08['VICMSST'])
StrFile += StrN08
if icms_cst in ('70',):
StrRegN09 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'ModBC': inv_line.icms_base_type,
'PRedBC': str(
"%.2f" %
inv_line.icms_percent_reduction),
'VBC': str(
"%.2f" %
inv_line.icms_base),
'PICMS': str(
"%.2f" %
inv_line.icms_percent),
'VICMS': str(
"%.2f" %
inv_line.icms_value),
'ModBCST': inv_line.icms_st_base_type,
'PMVAST': str(
"%.2f" %
inv_line.icms_st_mva) or '',
'PRedBCST': '',
'VBCST': str(
"%.2f" %
inv_line.icms_st_base),
'PICMSST': str(
"%.2f" %
inv_line.icms_st_percent),
'VICMSST': str(
"%.2f" %
inv_line.icms_st_value),
}
StrN09 = 'N09|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s'\
'|%s|%s|%s|\n' % (
StrRegN09['Orig'], StrRegN09['CST'],
StrRegN09['ModBC'], StrRegN09['PRedBC'],
StrRegN09['VBC'], StrRegN09['PICMS'],
StrRegN09['VICMS'], StrRegN09['ModBCST'],
StrRegN09['PMVAST'], StrRegN09['PRedBCST'],
StrRegN09['VBCST'], StrRegN09['PICMSST'],
StrRegN09['VICMSST'])
StrFile += StrN09
if icms_cst in ('90',):
StrRegN10 = {
'Orig': inv_line.product_id.origin or '0',
'CST': icms_cst,
'ModBC': inv_line.icms_base_type,
'PRedBC': str(
"%.2f" %
inv_line.icms_percent_reduction),
'VBC': str(
"%.2f" %
inv_line.icms_base),
'PICMS': str(
"%.2f" %
inv_line.icms_percent),
'VICMS': str(
"%.2f" %
inv_line.icms_value),
'ModBCST': inv_line.icms_st_base_type,
'PMVAST': str(
"%.2f" %
inv_line.icms_st_mva) or '',
'PRedBCST': '',
'VBCST': str(
"%.2f" %
inv_line.icms_st_base),
'PICMSST': str(
"%.2f" %
inv_line.icms_st_percent),
'VICMSST': str(
"%.2f" %
inv_line.icms_st_value),
}
StrN10 = 'N10|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n' %\
(StrRegN10['Orig'], StrRegN10['CST'],
StrRegN10['ModBC'], StrRegN10['PRedBC'],
StrRegN10['VBC'], StrRegN10['PICMS'],
StrRegN10['VICMS'], StrRegN10['ModBCST'],
StrRegN10['PMVAST'], StrRegN10['PRedBCST'],
StrRegN10['VBCST'], StrRegN10['PICMSST'],
StrRegN10['VICMSST'])
StrFile += StrN10
if icms_cst in ('101',):
StrRegN10c = {
'Orig': inv_line.product_id.origin or '0',
'CSOSN': icms_cst,
'pCredSN': str("%.2f" % inv_line.icms_percent),
'vCredICMSSN': str("%.2f" % inv_line.icms_value),
}
StrN10c = 'N10c|%s|%s|%s|%s|\n' %\
(StrRegN10c['Orig'], StrRegN10c['CSOSN'],
StrRegN10c['pCredSN'], StrRegN10c['vCredICMSSN'])
StrFile += StrN10c
# Incluido CST 102,103 e 300 - Uso no Simples Nacional - Linha
# original era para CST 400
if icms_cst in ('102', '103', '300', '400'):
StrRegN10d = {
'Orig': inv_line.product_id.origin or '0',
'CSOSN': icms_cst
}
StrN10d = 'N10d|%s|%s|\n' % (
StrRegN10d['Orig'], StrRegN10d['CSOSN'])
StrFile += StrN10d
if icms_cst in ('201',):
StrRegN10e = {
'Orig': inv_line.product_id.origin or '0',
'CSOSN': icms_cst,
'ModBCST': inv_line.icms_st_base_type,
'PMVAST': str("%.2f" % inv_line.icms_st_mva) or '',
'PRedBCST': '',
'VBCST': str("%.2f" % inv_line.icms_st_base),
'PICMSST': str("%.2f" % inv_line.icms_st_percent),
'VICMSST': str("%.2f" % inv_line.icms_st_value),
# TODO Obter aliquota ICMS Simples
'pCredSN': str("%.2f" % 0.00),
# TODO Calcular Crédito ICMS baseado aliquota anterior.
'vCredICMSSN': str("%.2f" % 0.00),
}
StrN10e = 'N10e|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n' %\
(StrRegN10e['Orig'], StrRegN10e['CSOSN'],
StrRegN10e['ModBCST'], StrRegN10e['PMVAST'],
StrRegN10e['PRedBCST'], StrRegN10e['VBCST'],
StrRegN10e['PICMSST'], StrRegN10e['VICMSST'],
StrRegN10e['pCredSN'], StrRegN10e['vCredICMSSN'])
StrFile += StrN10e
if icms_cst in ('202', '203'):
StrRegN10f = {
'Orig': inv_line.product_id.origin or '0',
'CSOSN': icms_cst,
'ModBCST': inv_line.icms_st_base_type,
'PMVAST': str("%.2f" % inv_line.icms_st_mva) or '',
'PRedBCST': '',
'VBCST': str("%.2f" % inv_line.icms_st_base),
'PICMSST': str("%.2f" % inv_line.icms_st_percent),
'VICMSST': str("%.2f" % inv_line.icms_st_value),
}
StrN10f = 'N10f|%s|%s|%s|%s|%s|%s|%s|%s|\n' %\
(StrRegN10f['Orig'], StrRegN10f['CSOSN'],
StrRegN10f['ModBCST'], StrRegN10f['PMVAST'],
StrRegN10f['PRedBCST'], StrRegN10f['VBCST'],
StrRegN10f['PICMSST'], StrRegN10f['VICMSST'])
StrFile += StrN10f
if icms_cst in ('500',):
StrRegN10g = {
'Orig': inv_line.product_id.origin or '0',
'CSOSN': icms_cst,
'vBCSTRet': '', # TODO Variavel cf Faixa faturamento
'vICMSSTRet': '' # TODO Variavel cf Faixa faturamento
}
StrN10g = 'N10g|%s|%s|%s|%s|\n' %\
(StrRegN10g['Orig'], StrRegN10g['CSOSN'],
StrRegN10g['vBCSTRet'], StrRegN10g['vICMSSTRet'])
StrFile += StrN10g
if icms_cst in ('900',):
StrRegN10h = {
'Orig': inv_line.product_id.origin or '0',
'CSOSN': icms_cst,
'modBC': inv_line.icms_base_type,
'vBC': str("%.2f" % 0.00),
'pRedBC': '',
'pICMS': str("%.2f" % 0.00),
'vICMS': str("%.2f" % 0.00),
'modBCST': '',
'pMVAST': '',
'pRedBCST': '',
'vBCST': '',
'pICMSST': '',
'vICMSST': '',
'pCredSN': str("%.2f" % 0.00),
'vCredICMSSN': str("%.2f" % 0.00),
}
StrN10h = 'N10h|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s'\
'|%s|\n' % (StrRegN10h['Orig'],
StrRegN10h['CSOSN'],
StrRegN10h['modBC'],
StrRegN10h['vBC'],
StrRegN10h['pRedBC'],
StrRegN10h['pICMS'],
StrRegN10h['vICMS'],
StrRegN10h['modBCST'],
StrRegN10h['pMVAST'],
StrRegN10h['pRedBCST'],
StrRegN10h['vBCST'],
StrRegN10h['pICMSST'],
StrRegN10h['vICMSST'],
StrRegN10h['pCredSN'],
StrRegN10h['vCredICMSSN'])
StrFile += StrN10h
StrRegO = {
'ClEnq': '',
'CNPJProd': '',
'CSelo': '',
'QSelo': '',
'CEnq': '999',
}
StrO = 'O|%s|%s|%s|%s|%s|\n' % (StrRegO['ClEnq'],
StrRegO['CNPJProd'],
StrRegO['CSelo'],
StrRegO['QSelo'],
StrRegO['CEnq'])
StrFile += StrO
if ipi_cst in ('50', '51', '52') and inv_line.ipi_percent > 0:
StrRegO07 = {
'CST': ipi_cst,
'VIPI': str("%.2f" % inv_line.ipi_value),
}
StrO07 = 'O07|%s|%s|\n' % (
StrRegO07['CST'], StrRegO07['VIPI'])
StrFile += StrO07
if inv_line.ipi_type == 'percent' or '':
StrRegO10 = {
'VBC': str("%.2f" % inv_line.ipi_base),
'PIPI': str("%.2f" % inv_line.ipi_percent),
}
StrO1 = 'O10|%s|%s|\n' % (
StrRegO10['VBC'], StrRegO10['PIPI'])
if inv_line.ipi_type == 'quantity':
pesol = 0
if inv_line.product_id:
pesol = inv_line.product_id.weight_net
StrRegO11 = {
'QUnid': str("%.4f" % (inv_line.quantity * pesol)),
'VUnid': str("%.4f" % inv_line.ipi_percent),
}
StrO1 = 'O11|%s|%s|\n' % (
StrRegO11['QUnid'], StrRegO11['VUnid'])
StrFile += StrO1
if ipi_cst in ('99'):
StrRegO07 = {
'CST': ipi_cst,
'VIPI': str("%.2f" % inv_line.ipi_value),
}
StrO07 = ('O07|%s|%s|\n') % (
StrRegO07['CST'], StrRegO07['VIPI'])
StrFile += StrO07
StrRegO10 = {
'VBC': str("%.2f" % inv_line.ipi_base),
'PIPI': str("%.2f" % inv_line.ipi_percent),
}
StrO10 = ('O10|%s|%s|\n') % (
StrRegO10['VBC'], StrRegO10['PIPI'])
StrFile += StrO10
if inv_line.ipi_percent == 0 and ipi_cst not in ('99'):
StrO1 = 'O08|%s|\n' % ipi_cst
StrFile += StrO1
StrRegP = {
'VBC': str("%.2f" % inv_line.ii_base),
'VDespAdu': str("%.2f" % inv_line.ii_customhouse_charges),
'VII': str("%.2f" % inv_line.ii_value),
'VIOF': str("%.2f" % inv_line.ii_iof),
}
StrP = ('P|%s|%s|%s|%s|\n') % (StrRegP['VBC'], StrRegP[
'VDespAdu'], StrRegP['VII'], StrRegP['VIOF'])
StrFile += StrP
if inv_line.product_type == 'service':
StrRegU = {
'VBC': str(
"%.2f" % inv_line.issqn_base),
'VAliq': str(
"%.2f" % inv_line.issqn_percent),
'VISSQN': str(
"%.2f" % inv_line.issqn_value),
'CMunFG': ('%s%s') % (inv.partner_id.state_id.ibge_code,
(inv.partner_id
.l10n_br_city_id.ibge_code)),
'CListServ': punctuation_rm(
inv_line.service_type_id.code),
'cSitTrib': inv_line.issqn_type}
StrU = ('U|%s|%s|%s|%s|%s|%s|\n') % (
StrRegU['VBC'],
StrRegU['VAliq'],
StrRegU['VISSQN'],
StrRegU['CMunFG'],
StrRegU['CListServ'],
StrRegU['cSitTrib'])
StrFile += StrU
StrQ = 'Q|\n'
StrFile += StrQ
if pis_cst in ('01', '02') and inv_line.pis_percent > 0:
StrRegQ02 = {
'CST': pis_cst,
'VBC': str("%.2f" % inv_line.pis_base),
'PPIS': str("%.2f" % inv_line.pis_percent),
'VPIS': str("%.2f" % inv_line.pis_value),
}
StrQ02 = ('Q02|%s|%s|%s|%s|\n') % (StrRegQ02['CST'],
StrRegQ02['VBC'],
StrRegQ02['PPIS'],
StrRegQ02['VPIS'])
StrFile += StrQ02
if pis_cst in ('99', '49'):
StrRegQ05 = {
'CST': pis_cst,
'VPIS': str("%.2f" % inv_line.pis_value),
}
StrQ05 = ('Q05|%s|%s|\n') % (
StrRegQ05['CST'], StrRegQ05['VPIS'])
StrFile += StrQ05
StrRegQ07 = {
'VBC': str("%.2f" % inv_line.pis_base),
'PPIS': str("%.2f" % inv_line.pis_percent),
}
StrQ07 = ('Q07|%s|%s|\n') % (
StrRegQ07['VBC'], StrRegQ07['PPIS'])
StrFile += StrQ07
if inv_line.pis_percent == 0 and pis_cst not in ('99', '49'):
StrQ02 = 'Q04|%s|\n' % pis_cst
StrFile += StrQ02
StrQ = 'S|\n'
StrFile += StrQ
if cofins_cst in ('01', '02') and inv_line.cofins_percent > 0:
StrRegS02 = {
'CST': cofins_cst,
'VBC': str("%.2f" % inv_line.cofins_base),
'PCOFINS': str("%.2f" % inv_line.cofins_percent),
'VCOFINS': str("%.2f" % inv_line.cofins_value),
}
StrS02 = ('S02|%s|%s|%s|%s|\n') % (StrRegS02['CST'], StrRegS02[
'VBC'], StrRegS02['PCOFINS'], StrRegS02['VCOFINS'])
StrFile += StrS02
if cofins_cst in ('99', '49'):
StrRegS05 = {
'CST': cofins_cst,
'VCOFINS': str("%.2f" % inv_line.cofins_value),
}
StrS05 = ('S05|%s|%s|\n') % (
StrRegS05['CST'], StrRegS05['VCOFINS'])
StrFile += StrS05
StrRegS07 = {
'VBC': str("%.2f" % inv_line.cofins_base),
'PCOFINS': str("%.2f" % inv_line.cofins_percent),
}
StrS07 = ('S07|%s|%s|\n') % (
StrRegS07['VBC'], StrRegS07['PCOFINS'])
StrFile += StrS07
if inv_line.cofins_percent == 0 and cofins_cst not in ('99', '49'):
StrS04 = 'S04|%s|\n' % cofins_cst
StrFile += StrS04
StrW = 'W|\n'
StrFile += StrW
StrRegW02 = {
'vBC': str("%.2f" % inv.icms_base),
'vICMS': str("%.2f" % inv.icms_value),
'vBCST': str("%.2f" % inv.icms_st_base),
'vST': str("%.2f" % inv.icms_st_value),
'vProd': str("%.2f" % inv.amount_gross),
'vFrete': str("%.2f" % inv.amount_freight),
'vSeg': str("%.2f" % inv.amount_insurance),
'vDesc': str("%.2f" % inv.amount_discount),
'vII': str("%.2f" % inv.ii_value),
'vIPI': str("%.2f" % inv.ipi_value),
'vPIS': str("%.2f" % inv.pis_value),
'vCOFINS': str("%.2f" % inv.cofins_value),
'vOutro': str("%.2f" % inv.amount_costs),
'vNF': str("%.2f" % inv.amount_total),
'vTotTrib': str("%.2f" % inv.amount_total_taxes),
}
StrW02 = 'W02|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n' % (
StrRegW02['vBC'], StrRegW02['vICMS'], StrRegW02['vBCST'],
StrRegW02['vST'], StrRegW02['vProd'], StrRegW02['vFrete'],
StrRegW02['vSeg'], StrRegW02['vDesc'], StrRegW02['vII'],
StrRegW02['vIPI'], StrRegW02['vPIS'], StrRegW02['vCOFINS'],
StrRegW02['vOutro'], StrRegW02['vNF'], StrRegW02['vTotTrib'])
StrFile += StrW02
# Modo do Frete:
# 0- Por conta do emitente;
# 1- Por conta do destinatário/remetente;
# 2- Por conta de terceiros; 9- Sem frete (v2.0)
try:
if not inv.incoterm:
StrRegX0 = '9'
else:
StrRegX0 = inv.incoterm.freight_responsibility
except AttributeError:
StrRegX0 = '9'
StrX = 'X|%s|\n' % (StrRegX0)
StrFile += StrX
StrRegX03 = {
'XNome': '',
'IE': '',
'XEnder': '',
'UF': '',
'XMun': '',
}
StrX0 = ''
try:
StrRegX03['XNome'] = normalize('NFKD', unicode(
inv.carrier_name or '')).encode('ASCII', 'ignore')
if inv.carrier_id:
# Endereço da transportadora
carrier_addr = pool.get('res.partner').address_get(
cr, uid, [inv.carrier_id.partner_id.id], ['default'])
carrier_addr_default = pool.get('res.partner').browse(
cr, uid, [carrier_addr['default']])[0]
if inv.carrier_id.partner_id.legal_name:
StrRegX03['XNome'] = (normalize(
'NFKD',
unicode(inv.carrier_id.partner_id.legal_name or ''))
.encode('ASCII', 'ignore'))
else:
StrRegX03['XNome'] = (normalize(
'NFKD',
unicode(inv.carrier_id.partner_id.name or ''))
.encode('ASCII', 'ignore'))
StrRegX03['IE'] = inv.carrier_id.partner_id.inscr_est or ''
StrRegX03['XEnder'] = normalize(
'NFKD', unicode(
carrier_addr_default.street or '')).encode(
'ASCII', 'ignore')
StrRegX03['UF'] = carrier_addr_default.state_id.code or ''
if carrier_addr_default.l10n_br_city_id:
StrRegX03['XMun'] = (normalize(
'NFKD', unicode(
carrier_addr_default.l10n_br_city_id.name or ''))
.encode('ASCII', 'ignore'))
if inv.carrier_id.partner_id.is_company:
StrX0 = 'X04|%s|\n' % (punctuation_rm(
inv.carrier_id.partner_id.cnpj_cpf))
else:
StrX0 = 'X05|%s|\n' % (punctuation_rm(
inv.carrier_id.partner_id.cnpj_cpf))
except AttributeError:
pass
StrX03 = 'X03|%s|%s|%s|%s|%s|\n' % (
StrRegX03['XNome'], StrRegX03['IE'], StrRegX03['XEnder'],
StrRegX03['UF'], StrRegX03['XMun'])
StrFile += StrX03
StrFile += StrX0
StrRegX18 = {
'Placa': '',
'UF': '',
'RNTC': '',
}
if inv.vehicle_plate:
try:
StrRegX18['Placa'] = inv.vehicle_plate or ''
StrRegX18['UF'] = inv.vehicle_state_id.code or ''
if inv.vehicle_id:
StrRegX18['RNTC'] = inv.vehicle_id.rntc_code or ''
except AttributeError:
pass
StrX18 = 'X18|%s|%s|%s|\n' % (StrRegX18['Placa'], StrRegX18[
'UF'], StrRegX18['RNTC'])
StrFile += StrX18
StrRegX26 = {
'QVol': '',
'Esp': '',
'Marca': '',
'NVol': '',
'PesoL': '',
'PesoB': '',
}
if inv.number_of_packages:
StrRegX26['QVol'] = inv.number_of_packages
StrRegX26['Esp'] = inv.kind_of_packages or ''
StrRegX26['Marca'] = inv.brand_of_packages or ''
StrRegX26['NVol'] = inv.number_of_packages or ''
StrRegX26['PesoL'] = str("%.3f" % inv.weight_net)
StrRegX26['PesoB'] = str("%.3f" % inv.weight)
StrX26 = 'X26|%s|%s|%s|%s|%s|%s|\n' % (
StrRegX26['QVol'], StrRegX26['Esp'], StrRegX26[
'Marca'], StrRegX26['NVol'], StrRegX26['PesoL'],
StrRegX26['PesoB'])
StrFile += StrX26
if inv.journal_id.revenue_expense:
StrY = 'Y|\n'
StrFile += StrY
for line in inv.move_line_receivable_id:
if inv.type in ('out_invoice', 'in_refund'):
value = line.debit
else:
value = line.credit
StrRegY07 = {
'NDup': line.name,
'DVenc': line.date_maturity or inv.date_due or
inv.date_invoice,
'VDup': str(
"%.2f" %
value),
}
StrY07 = 'Y07|%s|%s|%s|\n' % (StrRegY07['NDup'], StrRegY07[
'DVenc'], StrRegY07['VDup'])
StrFile += StrY07
StrRegZ = {
'InfAdFisco': normalize(
'NFKD',
unicode(
inv.fiscal_comment or '')).encode(
'ASCII',
'ignore'),
'InfCpl': normalize(
'NFKD',
unicode(
inv.comment or '')).encode(
'ASCII',
'ignore'),
}
StrZ = 'Z|%s|%s|\n' % (StrRegZ['InfAdFisco'], StrRegZ['InfCpl'])
StrFile += StrZ
if UFEmbarq != '' or XLocEmbarq != '':
StrRegZA = {
'UFEmbarq': UFEmbarq,
'XLocEmbarq': XLocEmbarq,
}
StrZA = 'ZA|%s|%s|\n' % (
StrRegZA['UFEmbarq'], StrRegZA['XLocEmbarq'])
StrFile += StrZA
documents = inv.internal_number
pool.get('account.invoice').write(
cr, uid, [inv.id], {'nfe_export_date': datetime.now()})
nfes.append({'key': documents, 'nfe': StrFile,
'message': ''})
return nfes
# return unicode(StrFile.encode('utf-8'), errors='replace')
[documentos]def nfe_import(cr, ids, nfe_environment='1', context=False):
pass