From a2a39ef41e6f12303eec4ae91ef513f941d9d98c Mon Sep 17 00:00:00 2001 From: Ankita Raval Date: Tue, 23 Jul 2019 12:44:31 +0000 Subject: [PATCH] [IMP] purchase: set schedule_date of po lines as per date_planned of PO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In this commit - 1. Previously, date_planned of PO was computed and set while the creation of PO. In this commit, removed the compute logic and now field will be empty until user fills it. 2. ‘Set date to all order lines’ button is removed. 3. Now if user have filled the date_planned of PO, it will be copied to all po lines. 4. Schedule date of PO line will be readonly if date_planned have any value else will be editable. 5. Update the test cases of computation of date_planned. Task-2032417 --- addons/purchase/models/purchase.py | 40 +++++++++---------- addons/purchase/views/purchase_views.xml | 7 +--- .../tests/test_purchase_lead_time.py | 4 +- 3 files changed, 22 insertions(+), 29 deletions(-) diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index afd2ffe09c0..d204a7f3bfc 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -31,18 +31,6 @@ class PurchaseOrder(models.Model): 'amount_total': amount_untaxed + amount_tax, }) - @api.depends('order_line.date_planned', 'date_order') - def _compute_date_planned(self): - for order in self: - min_date = False - for line in order.order_line: - if not min_date or line.date_planned and line.date_planned < min_date: - min_date = line.date_planned - if min_date: - order.date_planned = min_date - else: - order.date_planned = order.date_order - @api.depends('state', 'order_line.qty_invoiced', 'order_line.qty_received', 'order_line.product_qty') def _get_invoiced(self): precision = self.env['decimal.precision'].precision_get('Product Unit of Measure') @@ -109,7 +97,7 @@ class PurchaseOrder(models.Model): ], string='Billing Status', compute='_get_invoiced', store=True, readonly=True, copy=False, default='no') # There is no inverse function on purpose since the date may be different on each line - date_planned = fields.Datetime(string='Scheduled Date', compute='_compute_date_planned', store=True, index=True) + date_planned = fields.Datetime(string='Receipt Date', index=True) amount_untaxed = fields.Monetary(string='Untaxed Amount', store=True, readonly=True, compute='_amount_all', tracking=True) amount_tax = fields.Monetary(string='Taxes', store=True, readonly=True, compute='_amount_all') @@ -169,6 +157,12 @@ class PurchaseOrder(models.Model): vals['name'] = self.env['ir.sequence'].next_by_code('purchase.order') or '/' return super(PurchaseOrder, self).create(vals) + def write(self, vals): + res = super(PurchaseOrder, self).write(vals) + if vals.get('date_planned'): + self.order_line.write({'date_planned': vals['date_planned']}) + return res + def unlink(self): for order in self: if not order.state == 'cancel': @@ -178,10 +172,13 @@ class PurchaseOrder(models.Model): def copy(self, default=None): new_po = super(PurchaseOrder, self).copy(default=default) for line in new_po.order_line: - seller = line.product_id._select_seller( - partner_id=line.partner_id, quantity=line.product_qty, - date=line.order_id.date_order and line.order_id.date_order.date(), uom_id=line.product_uom) - line.date_planned = line._get_date_planned(seller) + if new_po.date_planned: + line.date_planned = new_po.date_planned + else: + seller = line.product_id._select_seller( + partner_id=line.partner_id, quantity=line.product_qty, + date=line.order_id.date_order and line.order_id.date_order.date(), uom_id=line.product_uom) + line.date_planned = line._get_date_planned(seller) return new_po def _track_subtype(self, init_values): @@ -409,10 +406,6 @@ class PurchaseOrder(models.Model): result['context']['default_reference'] = self.partner_ref return result - def action_set_date_planned(self): - for order in self: - order.order_line.update({'date_planned': order.date_planned}) - class PurchaseOrderLine(models.Model): _name = 'purchase.order.line' @@ -549,6 +542,11 @@ class PurchaseOrderLine(models.Model): if values.get('display_type', self.default_get(['display_type'])['display_type']): values.update(product_id=False, price_unit=0, product_uom_qty=0, product_uom=False, date_planned=False) + order_id = values.get('order_id') + if 'date_planned' not in values: + order = self.env['purchase.order'].browse(order_id) + if order.date_planned: + values['date_planned'] = order.date_planned line = super(PurchaseOrderLine, self).create(values) if line.order_id.state == 'purchase': msg = _("Extra line with %s ") % (line.product_id.display_name,) diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml index 99f237d889b..fe836240b4b 100644 --- a/addons/purchase/views/purchase_views.xml +++ b/addons/purchase/views/purchase_views.xml @@ -206,7 +206,7 @@ context="{'partner_id':parent.partner_id, 'quantity':product_qty,'uom':product_uom, 'company_id': parent.company_id}" force_save="1" domain="[('purchase_ok', '=', True), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/> - + @@ -342,11 +342,6 @@