Código fonte para l10n_br_account_product.models.res_partner

# -*- 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.addons.l10n_br_account_product.models.product import \
    PRODUCT_ORIGIN


[documentos]class AccountFiscalPositionTemplate(models.Model): _inherit = 'account.fiscal.position.template' cfop_id = fields.Many2one('l10n_br_account_product.cfop', 'CFOP') ind_final = fields.Selection([ ('0', u'Não'), ('1', u'Sim') ], u'Operação com Consumidor final', readonly=True, states={'draft': [('readonly', False)]}, required=False, help=u'Indica operação com Consumidor final.', default='0')
[documentos]class AccountFiscalPositionTaxTemplate(models.Model): _inherit = 'account.fiscal.position.tax.template' fiscal_classification_id = fields.Many2one( 'account.product.fiscal.classification.template', 'NCM') tax_ipi_guideline_id = fields.Many2one( 'l10n_br_account_product.ipi_guideline', string=u'Enquadramento IPI') tax_icms_relief_id = fields.Many2one( 'l10n_br_account_product.icms_relief', string=u'Desoneração ICMS') origin = fields.Selection(PRODUCT_ORIGIN, 'Origem',)
[documentos]class AccountFiscalPosition(models.Model): _inherit = 'account.fiscal.position' cfop_id = fields.Many2one('l10n_br_account_product.cfop', 'CFOP') ind_final = fields.Selection([ ('0', u'Não'), ('1', u'Sim') ], u'Operação com Consumidor final', readonly=True, states={'draft': [('readonly', False)]}, required=False, help=u'Indica operação com Consumidor final.', default='0') @api.v7 def map_tax(self, cr, uid, fposition_id, taxes, context=None): result = [] if not context: context = {} if fposition_id and fposition_id.company_id and \ context.get('type_tax_use') in ('sale', 'all'): if context.get('fiscal_type', 'product') == 'product': company_tax_ids = self.pool.get('res.company').read( cr, uid, fposition_id.company_id.id, ['product_tax_ids'], context=context)['product_tax_ids'] company_taxes = self.pool.get('account.tax').browse( cr, uid, company_tax_ids, context=context) if taxes: all_taxes = taxes + company_taxes else: all_taxes = company_taxes taxes = all_taxes if not taxes: return [] if not fposition_id: return map(lambda x: x.id, taxes) for t in taxes: ok = False tax_src = False for tax in fposition_id.tax_ids: tax_src = tax.tax_src_id and tax.tax_src_id.id == t.id tax_code_src = tax.tax_code_src_id and \ tax.tax_code_src_id.id == t.tax_code_id.id if tax_src or tax_code_src: if tax.tax_dest_id: result.append(tax.tax_dest_id.id) ok = True if not ok: result.append(t.id) return list(set(result)) def _map_tax_code(self, map_tax): result = {} for map in map_tax: domain = map.tax_dest_id.domain or map.tax_code_src_id.domain result[domain] = { 'tax': map.tax_dest_id, 'tax_code': map.tax_code_dest_id, 'icms_relief': map.tax_icms_relief_id, 'ipi_guideline': map.tax_ipi_guideline_id, } return result @api.multi def _map_tax(self, product_id, taxes): result = {} product = self.env['product.product'].browse(product_id) product_fc = product.fiscal_classification_id if self.company_id and \ self.env.context.get('type_tax_use') in ('sale', 'all'): if self.env.context.get('fiscal_type', 'product') == 'product': company_taxes = self.company_id.product_tax_definition_line for tax_def in company_taxes: if tax_def.tax_id: taxes |= tax_def.tax_id result[tax_def.tax_id.domain] = { 'tax': tax_def.tax_id, 'tax_code': tax_def.tax_code_id, 'icms_relief': tax_def.tax_icms_relief_id, 'ipi_guideline': tax_def.tax_ipi_guideline_id, } # FIXME se tiver com o admin pegar impostos de outras empresas product_ncm_tax_def = product_fc.sale_tax_definition_line else: # FIXME se tiver com o admin pegar impostos de outras empresas product_ncm_tax_def = product_fc.purchase_tax_definition_line for ncm_tax_def in product_ncm_tax_def: if ncm_tax_def.tax_id: result[ncm_tax_def.tax_id.domain] = { 'tax': ncm_tax_def.tax_id, 'tax_code': ncm_tax_def.tax_code_id, 'icms_relief': ncm_tax_def.tax_icms_relief_id, 'ipi_guideline': ncm_tax_def.tax_ipi_guideline_id, } if self.env.context.get('partner_id'): partner = self.env['res.partner'].browse( self.env.context.get('partner_id')) if (self.env.context.get('type_tax_use') in ('sale', 'all') and self.env.context.get('fiscal_type', 'product') == 'product'): state_taxes = partner.state_id.product_tax_definition_line for tax_def in state_taxes: if tax_def.tax_id and \ (not tax_def.fiscal_classification_id or tax_def.fiscal_classification_id == product_fc): taxes |= tax_def.tax_id result[tax_def.tax_id.domain] = { 'tax': tax_def.tax_id, 'tax_code': tax_def.tax_code_id, } map_taxes = self.env['account.fiscal.position.tax'].browse() map_taxes_ncm = self.env['account.fiscal.position.tax'].browse() map_taxes_origin = self.env['account.fiscal.position.tax'].browse() map_taxes_origin_ncm = self.env['account.fiscal.position.tax'].browse() for tax in taxes: for map in self.tax_ids: if (map.tax_src_id.id == tax.id or map.tax_dest_id == tax or map.tax_code_src_id.id == tax.tax_code_id.id): if map.tax_dest_id.id or tax.tax_code_id.id: map_taxes |= map if map.fiscal_classification_id.id == \ product.fiscal_classification_id.id: map_taxes_ncm |= map if map.origin == product.origin: map_taxes_origin |= map if (map.fiscal_classification_id.id == product.fiscal_classification_id.id and map.origin == product.origin): map_taxes_origin_ncm |= map else: map_taxes |= map else: if result.get(tax.domain): result[tax.domain].update({'tax': tax}) else: result[tax.domain] = {'tax': tax} result.update(self._map_tax_code(map_taxes)) result.update(self._map_tax_code(map_taxes_origin)) result.update(self._map_tax_code(map_taxes_ncm)) result.update(self._map_tax_code(map_taxes_origin_ncm)) return result @api.v8
[documentos] def map_tax_code(self, product_id, taxes=None): result = {} taxes_codes = self._map_tax(product_id, taxes) for code in taxes_codes: if taxes_codes[code].get('tax_code'): result.update({code: taxes_codes[code].get('tax_code').id}) if taxes_codes[code].get('ipi_guideline'): result.update({ 'ipi_guideline': taxes_codes[code].get('ipi_guideline').id }) if taxes_codes[code].get('icms_relief'): result.update({ 'icms_relief': taxes_codes[code].get('icms_relief').id }) return result
@api.v8
[documentos] def map_tax(self, taxes): result = self.env['account.tax'].browse() taxes_codes = self._map_tax(self.env.context.get('product_id'), taxes) for tax in taxes_codes: if taxes_codes[tax].get('tax'): result |= taxes_codes[tax].get('tax') return result
[documentos]class AccountFiscalPositionTax(models.Model): _inherit = 'account.fiscal.position.tax' fiscal_classification_id = fields.Many2one( 'account.product.fiscal.classification', 'NCM') tax_ipi_guideline_id = fields.Many2one( 'l10n_br_account_product.ipi_guideline', string=u'Enquadramento IPI') tax_icms_relief_id = fields.Many2one( 'l10n_br_account_product.icms_relief', string=u'Desoneração ICMS') origin = fields.Selection(PRODUCT_ORIGIN, 'Origem',)