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

        issue10431
        review363351002
diffstat:

 stock.py                  |  33 ++++++++++++++++-----------------
 view/shipment_in_form.xml |   7 ++-----
 2 files changed, 18 insertions(+), 22 deletions(-)

diffs (80 lines):

diff -r 2b38161fd7a2 -r c3acd50748ba stock.py
--- a/stock.py  Sun Apr 10 19:11:39 2022 +0200
+++ b/stock.py  Tue Apr 12 20:28:14 2022 +0200
@@ -19,29 +19,25 @@
     cost_currency_used = fields.Function(fields.Many2One(
             'currency.currency', "Cost Currency",
             states={
-                'invisible': Eval('cost_edit', False),
+                'readonly': ~(Eval('state').in_(['draft'])
+                    & Eval('cost_edit', False)),
                 }),
-        'on_change_with_cost_currency_used')
+        'on_change_with_cost_currency_used', setter='set_cost')
     cost_currency = fields.Many2One(
         'currency.currency', "Cost Currency",
         states={
             'required': Bool(Eval('cost')),
-            'invisible': ~Eval('cost_edit', False),
             'readonly': ~Eval('state').in_(['draft']),
             })
     cost_used = fields.Function(fields.Numeric(
             "Cost", digits=price_digits,
             states={
-                'invisible': Eval('cost_edit', False),
+                'readonly': ~(Eval('state').in_(['draft'])
+                    & Eval('cost_edit', False)),
                 }),
-        'on_change_with_cost_used')
+        'on_change_with_cost_used', setter='set_cost')
     cost = fields.Numeric(
-        "Cost", digits=price_digits,
-        states={
-            'invisible': ~Eval('cost_edit', False),
-            'readonly': ~Eval('state').in_(['draft']),
-            })
-
+        "Cost", digits=price_digits, readonly=True)
     cost_edit = fields.Boolean(
         "Edit Cost",
         states={
@@ -83,12 +79,15 @@
         else:
             return self.cost
 
-    @fields.depends(
-        'cost_edit', 'cost_used', 'cost_currency_used')
-    def on_change_cost_edit(self):
-        if self.cost_edit:
-            self.cost = self.cost_used
-            self.cost_currency = self.cost_currency_used
+    @classmethod
+    def set_cost(cls, lines, name, value):
+        if not value:
+            return
+        if name.endswith('_used'):
+            name = name[:-len('_used')]
+        cls.write([l for l in lines if l.cost_edit], {
+                name: value,
+                })
 
     def allocate_cost_by_value(self):
         pool = Pool()
diff -r 2b38161fd7a2 -r c3acd50748ba view/shipment_in_form.xml
--- a/view/shipment_in_form.xml Sun Apr 10 19:11:39 2022 +0200
+++ b/view/shipment_in_form.xml Tue Apr 12 20:28:14 2022 +0200
@@ -5,12 +5,9 @@
     <xpath expr="/form/notebook" position="after">
         <label name="carrier"/>
         <field name="carrier"/>
-        <group id="costs" col="-1" colspan="2">
-            <label name="cost"/>
-            <label name="cost_used"/>
-            <field name="cost"/>
+        <label name="cost_used"/>
+        <group id="costs" col="-1">
             <field name="cost_used"/>
-            <field name="cost_currency"/>
             <field name="cost_currency_used"/>
             <field name="cost_edit"/>
         </group>

Reply via email to