Código fonte para l10n_br_account_service.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, api
[documentos]class AccountFiscalPosition(models.Model):
_inherit = 'account.fiscal.position'
@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', 'service') == 'service':
company_tax_ids = self.pool.get('res.company').read(
cr, uid, fposition_id.company_id.id, ['service_tax_ids'],
context=context)['service_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))
@api.multi
def _map_tax(self, product_id, taxes):
result = {}
if self.company_id and\
self.env.context.get('type_tax_use') in ('sale', 'all'):
if self.env.context.get('fiscal_type', 'service') == 'service':
company_taxes = self.company_id.service_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,
}
map_taxes = self.env['account.fiscal.position.tax'].browse()
for tax in taxes:
for map in self.tax_ids:
if map.tax_src_id == tax or \
map.tax_code_src_id == tax.tax_code_id:
if map.tax_dest_id or tax.tax_code_id:
map_taxes |= map
else:
if result.get(tax.domain):
result[tax.domain].update({'tax': tax})
else:
result[tax.domain] = {'tax': tax}
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