changeset e5199cde6738 in modules/purchase:default
details: https://hg.tryton.org/modules/purchase?cmd=changeset&node=e5199cde6738
description:
        Replace invisible state by readonly for field edited with checkbox

        issue10431
        review363351002
diffstat:

 purchase.py                 |  40 +++++++++++++++++++++++++---------------
 view/purchase_line_form.xml |   3 +--
 2 files changed, 26 insertions(+), 17 deletions(-)

diffs (78 lines):

diff -r 245b1822ebde -r e5199cde6738 purchase.py
--- a/purchase.py       Mon Apr 11 21:27:52 2022 +0200
+++ b/purchase.py       Tue Apr 12 20:28:14 2022 +0200
@@ -1168,29 +1168,27 @@
             '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 @@
             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 -r 245b1822ebde -r e5199cde6738 view/purchase_line_form.xml
--- a/view/purchase_line_form.xml       Mon Apr 11 21:27:52 2022 +0200
+++ b/view/purchase_line_form.xml       Tue Apr 12 20:28:14 2022 +0200
@@ -26,8 +26,7 @@
             <label id="delivery_date" string="Delivery Date:"/>
             <group id="delivery_date" col="-1">
                 <field name="delivery_date" xexpand="0"/>
-                <field name="delivery_date_store" xexpand="0"/>
-                <field name="delivery_date_edit" xexpand="0"/>
+                <field name="delivery_date_edit" xexpand="0" xalign="0"/>
             </group>
             <separator name="description" colspan="4"/>
             <field name="description" colspan="4"/>

Reply via email to