# -*- coding: utf-8 -*-
# Copyright (C) 2013 Renato Lima - Akretion
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from openerp import models, fields, api, _
from openerp.exceptions import RedirectWarning
from .l10n_br_account_product_service import PRODUCT_FISCAL_TYPE
[documentos]class AccountInvoice(models.Model):
_inherit = 'account.invoice'
@api.model
def _get_fiscal_type(self):
return self.env.context.get('fiscal_type', '')
@api.model
@api.returns('l10n_br_account.fiscal_category')
def _default_fiscal_category(self):
DEFAULT_FCATEGORY_PRODUCT = {
'in_invoice': 'in_invoice_fiscal_category_id',
'out_invoice': 'out_invoice_fiscal_category_id',
'in_refund': 'in_refund_fiscal_category_id',
'out_refund': 'out_refund_fiscal_category_id'
}
DEFAULT_FCATEGORY_SERVICE = {
'in_invoice': 'in_invoice_service_fiscal_category_id',
'out_invoice': 'out_invoice_service_fiscal_category_id'
}
default_fo_category = {
'product': DEFAULT_FCATEGORY_PRODUCT,
'service': DEFAULT_FCATEGORY_SERVICE
}
invoice_type = self._context.get('type', 'out_invoice')
invoice_fiscal_type = self._context.get('fiscal_type', 'product')
company = self.env['res.company'].browse(self.env.user.company_id.id)
return company[default_fo_category[invoice_fiscal_type][invoice_type]]
@api.model
def _default_fiscal_document(self):
invoice_fiscal_type = self.env.context.get('fiscal_type', 'product')
if invoice_fiscal_type in ('product', 'service'):
fiscal_invoice_id = invoice_fiscal_type + '_invoice_id'
company = self.env['res.company'].browse(
self.env.user.company_id.id)
return company[fiscal_invoice_id]
@api.model
def _default_fiscal_document_serie(self):
invoice_fiscal_type = self.env.context.get('fiscal_type', 'product')
if invoice_fiscal_type in ('product', 'service'):
fiscal_document_serie = self.env['l10n_br_account.document.serie']
company = self.env['res.company'].browse(
self.env.user.company_id.id)
if invoice_fiscal_type == 'product':
fiscal_document_series = [doc_serie for doc_serie in
company.document_serie_product_ids if
doc_serie.fiscal_document_id.id ==
company.product_invoice_id.id and
doc_serie.active]
if fiscal_document_series:
fiscal_document_serie = fiscal_document_series[0]
else:
fiscal_document_serie = company.document_serie_service_id
return fiscal_document_serie
@api.model
[documentos] def fields_view_get(self, view_id=None, view_type='form',
toolbar=False, submenu=False):
context = self.env.context
fiscal_document_code = context.get('fiscal_document_code')
active_id = context.get('active_id')
nfe_form = ('l10n_br_account_product.'
'l10n_br_account_product_nfe_form')
nfe_tree = ('l10n_br_account_product.'
'l10n_br_account_product_nfe_tree')
nfe_views = {'form': nfe_form, 'tree': nfe_tree}
nfse_form = ('l10n_br_account_service.'
'l10n_br_account_service_nfse_form')
nfse_tree = ('l10n_br_account_service.'
'l10n_br_account_service_nfse_tree')
nfse_views = {'form': nfse_form, 'tree': nfse_tree}
if active_id:
invoice = self.browse(active_id)
fiscal_document_code = invoice.fiscal_document_id.code
if fiscal_document_code == '55':
if nfe_views.get(view_type):
view_id = self.env.ref(nfe_views.get(view_type)).id
if fiscal_document_code == 'XX':
if nfse_views.get(view_type):
view_id = self.env.ref(nfse_views.get(view_type)).id
return super(AccountInvoice, self).fields_view_get(
view_id=view_id, view_type=view_type,
toolbar=toolbar, submenu=submenu)
@api.onchange('fiscal_document_id')
[documentos] def onchange_fiscal_document_id(self):
serie = False
if self.fiscal_type in ('product', 'service'):
if self.issuer == '0':
if self.fiscal_type == 'product':
series = [doc_serie for doc_serie in
self.company_id.document_serie_product_ids if
doc_serie.fiscal_document_id.id ==
self.fiscal_document_id.id and doc_serie.active]
if series:
serie = series[0]
else:
serie = self.company_id.document_serie_service_id
if not serie:
action = self.env.ref(
'l10n_br_account.'
'action_l10n_br_account_document_serie_form')
msg = _(u'Você deve ter uma série de documento fiscal'
u' para este documento fiscal.')
raise RedirectWarning(
msg, action.id, _(u'Criar uma nova série'))
self.document_serie_id = serie
fiscal_type = fields.Selection(
PRODUCT_FISCAL_TYPE,
'Tipo Fiscal',
default=_get_fiscal_type
)
fiscal_category_id = fields.Many2one(
'l10n_br_account.fiscal.category', 'Categoria Fiscal',
readonly=True, states={'draft': [('readonly', False)]},
default=_default_fiscal_category)
document_serie_id = fields.Many2one(
'l10n_br_account.document.serie', string=u'Série',
domain="[('fiscal_document_id', '=', fiscal_document_id),\
('company_id','=',company_id)]", readonly=True,
states={'draft': [('readonly', False)]},
default=_default_fiscal_document_serie)
fiscal_document_id = fields.Many2one(
'l10n_br_account.fiscal.document', string='Documento', readonly=True,
states={'draft': [('readonly', False)]},
default=_default_fiscal_document)