New API for on_change

issue4203
review8581002
This commit is contained in:
Cédric Krier committed 2014-10-29 20:40:19 +01:00
1 parent 54598613f6
commit fed77c8b9a
2 files changed
+31 -45

No files matched your search

+24 -35
View File
@@ -59,7 +59,7 @@ class Sale:
@fields.depends(methods=['lines'])
def on_change_carrier(self):
return self.on_change_lines()
self.on_change_lines()
@fields.depends('carrier', 'party', 'currency', 'sale_date',
'shipment_cost_method', 'lines')
@@ -83,7 +83,7 @@ class Sale:
if self.party.lang:
party_context['language'] = self.party.lang.code
cost_line = {}
cost_line = None
products = [line.product for line in self.lines or []
if getattr(line, 'product', None)]
stockable = any(product.type in ('goods', 'assets')
@@ -97,20 +97,19 @@ class Sale:
with Transaction().set_context(party_context):
description = Product(product.id).rec_name
taxes = []
cost_line = SaleLine.default_get(SaleLine._fields.keys())
cost_line.update({
'type': 'line',
'product': product.id,
'description': description,
'quantity': 1, # XXX
'unit': product.sale_uom.id,
'unit_price': cost,
'shipment_cost': cost,
'amount': cost,
'taxes': taxes,
'sequence': 9999, # XXX
})
pattern = SaleLine(**cost_line)._get_tax_rule_pattern()
cost_line = SaleLine(
**SaleLine.default_get(SaleLine._fields.keys()))
cost_line.type = 'line'
cost_line.product = product
cost_line.description = description
cost_line.quantity = 1 # XXX
cost_line.unit = product.sale_uom
cost_line.unit_price = cost
cost_line.shipment_cost = cost
cost_line.amount = cost
cost_line.taxes = taxes
cost_line.sequence = 9999 # XXX
pattern = cost_line._get_tax_rule_pattern()
for tax in product.customer_taxes_used:
if party and party.customer_tax_rule:
tax_ids = party.customer_tax_rule.apply(tax, pattern)
@@ -123,32 +122,22 @@ class Sale:
if tax_ids:
taxes.extend(tax_ids)
to_remove = None
operator, operand = None, None
if not self.lines:
self.lines = []
lines = list(self.lines or [])
for line in self.lines:
if getattr(line, 'shipment_cost', None):
if line.shipment_cost != cost_line.get('shipment_cost'):
to_remove = line.id
self.lines.remove(line)
if line.shipment_cost != cost:
lines.remove(line)
if cost_line:
cost_line['description'] = getattr(line, 'description',
'')
cost_line.description = getattr(
line, 'description', '')
else:
cost_line = {}
cost_line = None
break
if cost_line:
self.lines.append(SaleLine(**cost_line))
lines.append(cost_line)
self.lines = lines
result = super(Sale, self).on_change_lines()
lines = result.setdefault('lines', {})
if to_remove:
lines.setdefault('remove', []).append(to_remove)
if cost_line:
lines.setdefault('add', []).append((-1, cost_line))
return result
super(Sale, self).on_change_lines()
def create_shipment(self, shipment_type):
Shipment = Pool().get('stock.shipment.out')
+7 -10
View File
@@ -60,21 +60,18 @@ class ShipmentOut:
@fields.depends('carrier', 'customer', 'inventory_moves')
def on_change_inventory_moves(self):
Currency = Pool().get('currency.currency')
try:
result = super(ShipmentOut, self).on_change_inventory_moves()
super(ShipmentOut, self).on_change_inventory_moves()
except AttributeError:
result = {}
pass
if not self.carrier:
return result
return
with Transaction().set_context(self._get_carrier_context()):
cost, currency_id = self.carrier.get_sale_price()
currency = Currency(currency_id)
result['cost'] = cost
result['cost_currency'] = currency.id
result['cost_currency_digits'] = currency.digits if currency else 2
return result
self.cost = cost
self.cost_currency = currency_id
self.cost_currency_digits = (self.cost_currency.digits
if self.cost_currency else 2)
def _get_cost_tax_rule_pattern(self):
'Get tax rule pattern for invoice line'