Código fonte para l10n_br_account_product.wizard.account_invoice_refund
# -*- coding: utf-8 -*-
# Copyright (C) 2013 Florian da Costa - Akretion
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from lxml import etree
from openerp import models, fields, api, _
from openerp.exceptions import Warning as UserError
from openerp.addons.l10n_br_account.models.account_invoice import (
OPERATION_TYPE,
JOURNAL_TYPE)
[documentos]class AccountInvoiceRefund(models.TransientModel):
_inherit = "account.invoice.refund"
force_fiscal_category_id = fields.Many2one(
'l10n_br_account.fiscal.category', 'Forçar Categoria Fiscal',
domain="[('journal_type', '=', 'sale_refund'),\
('fiscal_type', '=', 'product')]")
@api.multi
[documentos] def compute_refund(self, mode='refund'):
inv_obj = self.env['account.invoice']
context = dict(self.env.context)
for send_invoice in inv_obj.browse(context.get('active_ids')):
result = super(AccountInvoiceRefund, self).compute_refund(mode)
domain = result['domain']
ids_domain = [x for x in domain if x[0] == 'id'][0]
invoice_ids = ids_domain[2]
for invoice in inv_obj.browse(invoice_ids):
if not self.force_fiscal_category_id and not \
invoice.fiscal_category_id.refund_fiscal_category_id:
raise UserError(_("Categoria Fiscal: %s não possui uma "
"catégoria de devolução!") %
invoice.fiscal_category_id.name)
invoice.fiscal_category_id = (
self.force_fiscal_category_id.id or
invoice.fiscal_category_id.refund_fiscal_category_id.id)
invoice.onchange_fiscal()
invoice_values = {
'fiscal_category_id': invoice.fiscal_category_id.id,
'fiscal_position': invoice.fiscal_position.id,
'nfe_purpose': '4'
}
for line in invoice.invoice_line:
if not self.force_fiscal_category_id and not \
line.fiscal_category_id.refund_fiscal_category_id:
raise UserError(_(u"Categoria Fiscal: %s não possui"
u" uma catégoria de devolução!") %
line.fiscal_category_id.name)
line.fiscal_category_id = (
self.force_fiscal_category_id.id or
line.fiscal_category_id.refund_fiscal_category_id.id)
line.onchange_fiscal()
line_values = {
'fiscal_category_id': line.fiscal_category_id.id,
'fiscal_position': line.fiscal_position.id,
'cfop_id': line.fiscal_position.cfop_id.id
}
line.write(line_values)
invoice.write(invoice_values)
return result
[documentos] def fields_view_get(self, cr, uid, view_id=None, view_type='form',
context=None, toolbar=False, submenu=False):
result = super(AccountInvoiceRefund, self).fields_view_get(
cr, uid, view_id, view_type, context, toolbar, submenu)
if not context:
context = {}
type = context.get('type', 'out_invoice')
journal_type = JOURNAL_TYPE[type]
type = OPERATION_TYPE[type]
eview = etree.fromstring(result['arch'])
fiscal_categ = eview.xpath("//field[@name='fiscal_category_id']")
for field in fiscal_categ:
field.set('domain', "[('journal_type', '=', '%s'),\
('fiscal_type', '=', 'product'),\
('type', '=', '%s')]" % (journal_type,
type))
result['arch'] = etree.tostring(eview)
return result