From e61c5f97a8feb46ea9d0af0c46a43d3cc055faa1 Mon Sep 17 00:00:00 2001 From: qdp Date: Mon, 19 Jan 2009 17:49:29 +0100 Subject: [PATCH] [IMP] modified invoices in order to use fiscal position direclty on account.invoice instead of using the one from the partner. bzr revid: qdp@tinyerp.com-20090119164929-st76nr5j75xrlwl8 --- addons/account/account_invoice_view.xml | 6 +++--- addons/account/invoice.py | 22 +++++++++++----------- addons/account/partner.py | 15 ++++++++------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index eb196fa6a8e..e04b7c74a99 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -52,7 +52,7 @@
- + @@ -154,8 +154,8 @@ - - + + diff --git a/addons/account/invoice.py b/addons/account/invoice.py index a560b094b40..06f604c6a1f 100644 --- a/addons/account/invoice.py +++ b/addons/account/invoice.py @@ -320,8 +320,7 @@ class account_invoice(osv.osv): acc_id = p.property_account_receivable.id else: acc_id = p.property_account_payable.id - if p.property_account_position: - fiscal_position = p.property_account_position.id + fiscal_position = p.property_account_position and p.property_account_position.id or False partner_payment_term = p.property_payment_term and p.property_payment_term.id or False if p.bank_ids: bank_id = p.bank_ids[0].id @@ -950,7 +949,7 @@ class account_invoice_line(osv.osv): price_unit = price_unit - tax['amount'] return {'price_unit': price_unit,'invoice_line_tax_id': tax_id} - def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, price_unit=False, address_invoice_id=False, context=None): + def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, address_invoice_id=False, context=None): if context is None: context = {} if not partner_id: @@ -961,15 +960,17 @@ class account_invoice_line(osv.osv): else: return {'value': {'price_unit': 0.0}, 'domain':{'product_uom':[]}} part = self.pool.get('res.partner').browse(cr, uid, partner_id) + fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False + lang=part.lang context.update({'lang': lang}) res = self.pool.get('product.product').browse(cr, uid, product, context=context) taxep=None tax_obj = self.pool.get('account.tax') if type in ('out_invoice', 'out_refund'): - tax_id = self.pool.get('account.fiscal.position').map_tax(cr, uid, part, res.taxes_id) + tax_id = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, res.taxes_id) else: - tax_id = self.pool.get('account.fiscal.position').map_tax(cr, uid, part, res.supplier_taxes_id) + tax_id = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, res.supplier_taxes_id) if type in ('in_invoice', 'in_refund'): result = self.product_id_change_unit_price_inv(cr, uid, tax_id, price_unit, qty, address_invoice_id, product, partner_id, context=context) else: @@ -987,7 +988,7 @@ class account_invoice_line(osv.osv): if not a: a = res.categ_id.property_account_expense_categ.id - a = self.pool.get('account.fiscal.position').map_account(cr, uid, part, a) + a = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, a) if a: result['account_id'] = a @@ -1057,13 +1058,12 @@ class account_invoice_line(osv.osv): # # Set the tax field according to the account and the partner # - def onchange_account_id(self, cr, uid, ids, partner_id,account_id): - if not (partner_id and account_id): + def onchange_account_id(self, cr, uid, ids, fposition_id, account_id): + if not (fposition_id and account_id): return {} taxes = self.pool.get('account.account').browse(cr, uid, account_id).tax_ids - part = self.pool.get('res.partner').browse(cr, uid, partner_id) - - res = self.pool.get('account.fiscal.position').map_tax(cr, uid, part, taxes) + fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False + res = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, taxes) r = {'value':{'invoice_line_tax_id': res}} return r account_invoice_line() diff --git a/addons/account/partner.py b/addons/account/partner.py index a2e981fb4ab..9cfe5e3bf1b 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -32,14 +32,15 @@ class account_fiscal_position(osv.osv): 'account_ids': fields.one2many('account.fiscal.position.account', 'position_id', 'Accounts Mapping'), 'tax_ids': fields.one2many('account.fiscal.position.tax', 'position_id', 'Taxes Mapping') } - def map_tax(self, cr, uid, partner, taxes, context={}): - if (not partner) or (not partner.property_account_position) : + + def map_tax(self, cr, uid, fposition_id, taxes, context={}): + if not fposition_id: return map(lambda x: x.id, taxes) result = [] for t in taxes: ok = False - for tax in partner.property_account_position.tax_ids: - if tax.tax_src_id.id==t.id: + for tax in fposition_id.tax_ids: + if tax.tax_src_id.id == t.id: if tax.tax_dest_id: result.append(tax.tax_dest_id.id) ok=True @@ -47,10 +48,10 @@ class account_fiscal_position(osv.osv): result.append(t.id) return result - def map_account(self, cr, uid, partner, account_id, context={}): - if (not partner) or (not partner.property_account_position) : + def map_account(self, cr, uid, fposition_id, account_id, context={}): + if not fposition_id : return account_id - for pos in partner.property_account_position.account_ids: + for pos in fposition_id.account_ids: if pos.account_src_id.id==account_id: account_id = pos.account_dest_id.id break