Código fonte para l10n_br_account_service.models.account_invoice

# -*- coding: utf-8 -*-
# Copyright (C) 2009  Renato Lima - 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.addons.l10n_br_account.models.account_invoice import (
    OPERATION_TYPE)

from .l10n_br_account_service import (
    PRODUCT_FISCAL_TYPE,
    PRODUCT_FISCAL_TYPE_DEFAULT)


[documentos]class AccountInvoice(models.Model): _inherit = 'account.invoice' @api.model def _default_fiscal_document(self): company = self.env['res.company'].browse(self.env.user.company_id.id) return company.service_invoice_id @api.model def _default_fiscal_document_serie(self): company = self.env['res.company'].browse(self.env.user.company_id.id) return company.document_serie_service_id @api.model @api.returns('l10n_br_account.fiscal_category') def _default_fiscal_category(self): DEFAULT_FCATEGORY_SERVICE = { 'in_invoice': 'in_invoice_service_fiscal_category_id', 'out_invoice': 'out_invoice_service_fiscal_category_id', 'in_refund': 'out_invoice_service_fiscal_category_id', 'out_refund': 'in_invoice_service_fiscal_category_id' } default_fo_category = {'service': DEFAULT_FCATEGORY_SERVICE} invoice_type = self._context.get('type', 'out_invoice') invoice_fiscal_type = self._context.get('fiscal_type', 'service') company = self.env['res.company'].browse(self.env.user.company_id.id) return company[default_fo_category[invoice_fiscal_type][invoice_type]] fiscal_type = fields.Selection( PRODUCT_FISCAL_TYPE, 'Tipo Fiscal', default=PRODUCT_FISCAL_TYPE_DEFAULT ) fiscal_category_id = fields.Many2one( 'l10n_br_account.fiscal.category', 'Categoria Fiscal', readonly=True, states={'draft': [('readonly', False)]}, default=_default_fiscal_category ) fiscal_document_id = fields.Many2one( 'l10n_br_account.fiscal.document', 'Documento', readonly=True, states={'draft': [('readonly', False)]}, default=_default_fiscal_document ) fiscal_document_electronic = fields.Boolean( related='fiscal_document_id.electronic' ) document_serie_id = fields.Many2one( 'l10n_br_account.document.serie', 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 ) @api.onchange('fiscal_document_id')
[documentos] def onchange_fiscal_document_id(self): self.document_serie_id = self.company_id.document_serie_service_id
@api.model
[documentos] def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False): context = self.env.context active_id = context.get('active_id') fiscal_document_code = context.get('fiscal_document_code') 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 nfse_views.get(view_type) and fiscal_document_code == u'XX': 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.multi
[documentos] def open_fiscal_document(self): """return action to open NFS-e form""" result = super(AccountInvoice, self).open_fiscal_document() result['name'] = _('NFS-e') return result
[documentos]class AccountInvoiceLine(models.Model): _inherit = 'account.invoice.line' # TODO migrate to new API
[documentos] def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): result = super(AccountInvoiceLine, self).fields_view_get( cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu) if context is None: context = {} if view_type == 'form': eview = etree.fromstring(result['arch']) if 'type' in context.keys(): cfops = eview.xpath("//field[@name='cfop_id']") for cfop_id in cfops: cfop_id.set('domain', "[('type','=','%s')]" % ( OPERATION_TYPE[context['type']],)) cfop_id.set('required', '1') if context.get('fiscal_type', False) == 'service': cfops = eview.xpath("//field[@name='cfop_id']") for cfop_id in cfops: cfop_id.set('invisible', '1') cfop_id.set('required', '0') result['arch'] = etree.tostring(eview) return result