[FIX] sale: change fiscal_position don't change order line taxes; Add onchange_fiscal_position method on sale.order

bzr revid: chm@openerp.com-20140505085755-wewn9xm8bp08ywnd
This commit is contained in:
chm@openerp.com 2014-05-05 10:57:55 +02:00
parent e09a8934b4
commit 1a9f3165ce
2 changed files with 36 additions and 1 deletions

View File

@ -626,6 +626,40 @@ class sale_order(osv.osv):
def action_done(self, cr, uid, ids, context=None):
return self.write(cr, uid, ids, {'state': 'done'}, context=context)
def onchange_fiscal_position(self, cr, uid, ids, fiscal_position, order_lines, context=None):
order_line = []
fiscal_obj = self.pool.get('account.fiscal.position')
product_obj = self.pool.get('product.product')
line_obj = self.pool.get('sale.order.line')
fpos = False
if fiscal_position:
fpos = fiscal_obj.browse(cr, uid, fiscal_position, context=context)
for line in order_lines:
# create (0, 0, { fields })
# update (1, ID, { fields })
if line[0] in [0, 1]:
taxes_id = None
if line[2].get('product_id'):
taxes_id = product_obj.browse(cr, uid, line[2]['product_id'], context=context).taxes_id
elif line[1]:
taxes_id = line_obj.browse(cr, uid, line[1], context=context).product_id.taxes_id
if taxes_id:
line[2]['tax_id'] = [[6, 0, fiscal_obj.map_tax(cr, uid, fpos, taxes_id)]]
order_line.append(line)
# link (4, ID)
# link all (6, 0, IDS)
elif line[0] in [4, 6]:
line_ids = line[0] == 4 and [line[1]] or line[2]
for line_id in line_ids:
taxes_id = line_obj.browse(cr, uid, line_id, context=context).product_id.taxes_id
order_line.append([1, line_id, {'tax_id': [[6, 0, fiscal_obj.map_tax(cr, uid, fpos, taxes_id)]]}])
else:
order_line.append(line)
return {'value': {'order_line': order_line}}
# TODO add a field price_unit_uos

View File

@ -206,7 +206,8 @@
</group>
<group name="sale_pay">
<field name="payment_term" options="{'no_create': True}"/>
<field name="fiscal_position" options="{'no_create': True}"/>
<field name="fiscal_position" options="{'no_create': True}"
on_change="onchange_fiscal_position(fiscal_position, order_line, context)"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
</group>
<group>