From f5e9784897201affc4f56b9ab9f7ccac4010ebe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 1 Dec 2011 16:06:06 +0100 Subject: [PATCH] Add a Function field delivery_date to purchase line issue2238 review188001 --- CHANGELOG | 1 + purchase.py | 43 +++++++++++++++++++++++++++++++++---------- purchase.xml | 2 ++ 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 1bb564493d..c59455b6f2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Add a Function field delivery_date to purchase line * Purchase date is required only at confirmation * compute_supply_date returns only one date * warehouse is not always required diff --git a/purchase.py b/purchase.py index e56e1a56d1..89a58eefa5 100644 --- a/purchase.py +++ b/purchase.py @@ -975,6 +975,10 @@ class PurchaseLine(ModelSQL, ModelView): 'From Location'), 'get_from_location') to_location = fields.Function(fields.Many2One('stock.location', 'To Location'), 'get_to_location') + delivery_date = fields.Function(fields.Date('Delivery Date', + on_change_with=['product', '_parent_purchase.purchase_date', + '_parent_purchase.party']), + 'get_delivery_date') def __init__(self): super(PurchaseLine, self).__init__() @@ -1223,6 +1227,34 @@ class PurchaseLine(ModelSQL, ModelView): result[line.id] = False return result + def _compute_delivery_date(self, product, party, date): + product_supplier_obj = Pool().get('purchase.product_supplier') + if not product.product_suppliers: + return False + for product_supplier in product.product_suppliers: + if product_supplier.party.id == party.id: + return product_supplier_obj.compute_supply_date( + product_supplier, date=date) + return False + + def on_change_with_delivery_date(self, values): + pool = Pool() + product_obj = pool.get('product.product') + party_obj = pool.get('party.party') + if values.get('product') and values.get('_parent_purchase.party'): + product = product_obj.browse(values['product']) + party = party_obj.browse(values['_parent_purchase.party']) + return self._compute_delivery_date(product, party, + values.get('_parent_purchase.purchase_date')) + return False + + def get_delivery_date(self, ids, name): + dates = {} + for line in self.browse(ids): + dates[line.id] = self._compute_delivery_date(line.product, + line.purchase.party, line.purchase.purchase_date) + return dates + def get_invoice_line(self, line): ''' Return invoice line values for purchase line @@ -1302,7 +1334,6 @@ class PurchaseLine(ModelSQL, ModelView): pool = Pool() move_obj = pool.get('stock.move') uom_obj = pool.get('product.uom') - product_supplier_obj = pool.get('purchase.product_supplier') vals = {} if line.type != 'line': @@ -1330,15 +1361,7 @@ class PurchaseLine(ModelSQL, ModelView): vals['company'] = line.purchase.company.id vals['unit_price'] = line.unit_price vals['currency'] = line.purchase.currency.id - - if line.product.product_suppliers: - for product_supplier in line.product.product_suppliers: - if product_supplier.party.id == line.purchase.party.id: - vals['planned_date'] = \ - product_supplier_obj.compute_supply_date( - product_supplier, - date=line.purchase.purchase_date) - break + vals['planned_date'] = line.delivery_date with Transaction().set_user(0, set_context=True): move_id = move_obj.create(vals) diff --git a/purchase.xml b/purchase.xml index 1567f8074a..3dba0b706b 100644 --- a/purchase.xml +++ b/purchase.xml @@ -719,6 +719,8 @@ this repository contains the full copyright notices and license terms. -->