Código fonte para l10n_br_account_product.wizard.l10n_br_account_nfe_export_invoice

# -*- coding: utf-8 -*-
# Copyright (C) 2009  Renato Lima - Akretion
# Copyright (C) 2011  Vinicius Dittgen - PROGE, Leonardo Santagada - PROGE
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html

import time
import base64
from openerp import models, fields, api, _
from openerp.exceptions import Warning as UserError


[documentos]class L10nBrAccountNfeExportInvoice(models.TransientModel): """ Export fiscal eletronic file from invoice""" _name = 'l10n_br_account_product.nfe_export_invoice' _description = 'Export eletronic invoice for Emissor de NFe SEFAZ SP' def _default_file_type(self): company_id = self.env['res.company']._company_default_get( 'l10n_br_account_product.nfe_export_invoice') return self.env['res.company'].browse(company_id).file_type def _default_nfe_environment(self): company_id = self.env['res.company']._company_default_get( 'l10n_br_account_product.nfe_export_invoice') return self.env['res.company'].browse(company_id).nfe_environment def _default_export_folder(self): company_id = self.env['res.company']._company_default_get( 'l10n_br_account_product.nfe_export_invoice') return self.env['res.company'].browse(company_id).export_folder def _default_sign_xml(self): company_id = self.env['res.company']._company_default_get( 'l10n_br_account_product.nfe_export_invoice') return self.env['res.company'].browse(company_id).sign_xml name = fields.Char('Nome', size=255) file = fields.Binary('Arquivo', readonly=True) file_type = fields.Selection( selection=[ (u'xml', 'XML'), (u'txt', ' TXT') ], string='Tipo do Arquivo', default=_default_file_type) state = fields.Selection( selection=[ ('init', 'init'), ('done', 'done') ], string='state', readonly=True, default='init') nfe_environment = fields.Selection( selection=[ ('1', u'Produção'), ('2', u'Homologação') ], string='Ambiente', default=_default_nfe_environment) sign_xml = fields.Boolean( string='Assinar XML', default=_default_sign_xml) nfe_export_result = fields.One2many( comodel_name='l10n_br_account_product.nfe_export_invoice_result', inverse_name='wizard_id', string='NFe Export Result') export_folder = fields.Boolean( string=u'Salvar na Pasta de Exportação', default=_default_export_folder) @api.multi
[documentos] def nfe_export(self): for data in self: active_ids = self._context.get('active_ids', []) if not active_ids: err_msg = (u'Não existe nenhum documento fiscal para ser' u' exportado!') export_inv_ids = [] export_inv_numbers = [] company_ids = [] err_msg = '' for inv in self.env['account.invoice'].browse(active_ids): if inv.state not in ('sefaz_export'): err_msg += (u"O Documento Fiscal %s não esta definida para" u" ser exportação " u"para a SEFAZ.\n") % inv.internal_number elif not inv.issuer == '0': err_msg += (u"O Documento Fiscal %s é do tipo externa e " u"não pode ser exportada para a " u"receita.\n") % inv.internal_number else: inv.write({ 'nfe_export_date': False, 'nfe_access_key': False, 'nfe_status': False, 'nfe_date': False }) message = "O Documento Fiscal %s foi \ exportado." % inv.internal_number inv.log(message) export_inv_ids.append(inv.id) company_ids.append(inv.company_id.id) export_inv_numbers.append(inv.internal_number) if len(set(company_ids)) > 1: err_msg += (u'Não é permitido exportar Documentos Fiscais de ' u'mais de uma empresa, por favor selecione ' u'Documentos Fiscais da mesma empresa.') if export_inv_ids: if len(export_inv_numbers) > 1: name = 'nfes%s-%s.%s' % ( time.strftime('%d-%m-%Y'), self.env['ir.sequence'].get('nfe.export'), data.file_type) else: name = 'nfe%s.%s' % (export_inv_numbers[0], data.file_type) mod_serializer = __import__( ('openerp.addons.l10n_br_account_product' '.sped.nfe.serializer.') + data.file_type, globals(), locals(), data.file_type) func = getattr(mod_serializer, 'nfe_export') str_nfe_version = inv.nfe_version nfes = func(self._cr, self._uid, export_inv_ids, data.nfe_environment, str_nfe_version, self._context) for nfe in nfes: nfe_file = nfe['nfe'].encode('utf8') data.write({ 'file': base64.b64encode(nfe_file), 'state': 'done', 'name': name, }) if err_msg: raise UserError(_('Error!'), _("'%s'") % _(err_msg, )) view_rec = self.env['ir.model.data'].get_object_reference( 'l10n_br_account_product', 'l10n_br_account_product_nfe_export_invoice_form') view_id = view_rec and view_rec[1] or False return { 'view_type': 'form', 'view_id': [view_id], 'view_mode': 'form', 'res_model': 'l10n_br_account_product.nfe_export_invoice', 'res_id': data.id, 'type': 'ir.actions.act_window', 'target': 'new', 'context': data.env.context, }
[documentos]class L10nBrAccountNfeExportInvoiceResult(models.TransientModel): _name = 'l10n_br_account_product.nfe_export_invoice_result' wizard_id = fields.Many2one( comodel_name='l10n_br_account_product.nfe_export_invoice', string='Wizard ID', ondelete='cascade', select=True) document = fields.Char(string='Documento', size=255) status = fields.Selection( selection=[ ('success', 'Sucesso'), ('error', 'Erro') ], string='Status') message = fields.Char(string='Mensagem', size=255)