From d06e2470b8fe46695d2190fefa1c8727023908ba Mon Sep 17 00:00:00 2001 From: Maxime Richez Date: Tue, 12 Apr 2022 20:28:14 +0200 Subject: [PATCH] Replace invisible state by readonly for field edited with checkbox issue10431 review363351002 --- purchase.py | 40 +++++++++++++++++++++++-------------- view/purchase_line_form.xml | 3 +-- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/purchase.py b/purchase.py index 38246e0c72..d8a1db2d39 100644 --- a/purchase.py +++ b/purchase.py @@ -1168,29 +1168,27 @@ class Line(sequence_ordered(), ModelSQL, ModelView): 'To Location'), 'get_to_location') delivery_date = fields.Function(fields.Date('Delivery Date', states={ - 'invisible': ((Eval('type') != 'line') - | (Eval('delivery_date_edit', False) - & ~Eval('purchase_state').in_( - ['processing', 'done', 'cancelled']))), + 'invisible': Eval('type') != 'line', + 'readonly': (Eval('purchase_state').in_( + ['processing', 'done', 'cancelled']) + | ~Eval('delivery_date_edit', False)), }), - 'on_change_with_delivery_date') + 'on_change_with_delivery_date', setter='set_delivery_date') delivery_date_edit = fields.Boolean( "Edit Delivery Date", states={ - 'invisible': Eval('type') != 'line', - 'readonly': Eval('purchase_state').in_([ - 'processing', 'done', 'cancelled']), + 'invisible': ( + (Eval('type') != 'line') + | Eval('purchase_state').in_( + ['processing', 'done', 'cancelled'])), + 'readonly': Eval('purchase_state').in_( + ['processing', 'done', 'cancelled']), }, help="Check to edit the delivery date.") delivery_date_store = fields.Date( - "Delivery Date", + "Delivery Date", readonly=True, states={ - 'invisible': ((Eval('type') != 'line') - | ~Eval('delivery_date_edit', False) - | Eval('purchase_state').in_( - ['processing', 'done', 'cancelled'])), - 'readonly': Eval('purchase_state').in_([ - 'processing', 'done', 'cancelled']), + 'invisible': Eval('type') != 'line', }) purchase_state = fields.Function( fields.Selection('get_purchase_states', 'Purchase State'), @@ -1454,6 +1452,18 @@ class Line(sequence_ordered(), ModelSQL, ModelView): return min(dates, default=None) return self.planned_delivery_date + @classmethod + def set_delivery_date(cls, lines, name, value): + cls.write([l for l in lines if l.delivery_date_edit], { + 'delivery_date_store': value, + }) + + @fields.depends('delivery_date_edit', 'delivery_date', + methods=['planned_delivery_date']) + def on_change_delivery_date_edit(self): + if not self.delivery_date_edit: + self.delivery_date = self.planned_delivery_date + @property @fields.depends( 'product_supplier', 'quantity', 'purchase', diff --git a/view/purchase_line_form.xml b/view/purchase_line_form.xml index 4409da8378..6eeb75d61d 100644 --- a/view/purchase_line_form.xml +++ b/view/purchase_line_form.xml @@ -26,8 +26,7 @@ this repository contains the full copyright notices and license terms. -->