details:   https://code.tryton.org/tryton/commit/533b5582f166
branch:    default
user:      Cédric Krier <[email protected]>
date:      Wed Feb 25 15:25:02 2026 +0100
description:
        Add origin reference to work
diffstat:

 modules/project/CHANGELOG                   |   1 +
 modules/project/view/work_form.xml          |   2 ++
 modules/project/view/work_list.xml          |   1 +
 modules/project/view/work_list_children.xml |   1 +
 modules/project/view/work_list_simple.xml   |   1 +
 modules/project/view/work_tree.xml          |   1 +
 modules/project/view/work_tree_simple.xml   |   1 +
 modules/project/work.py                     |  27 +++++++++++++++++++++++++--
 modules/project_revenue/work.py             |   8 +++++++-
 9 files changed, 40 insertions(+), 3 deletions(-)

diffs (152 lines):

diff -r 24c543face12 -r 533b5582f166 modules/project/CHANGELOG
--- a/modules/project/CHANGELOG Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project/CHANGELOG Wed Feb 25 15:25:02 2026 +0100
@@ -1,3 +1,4 @@
+* Add origin reference to work
 * Add number to the work efforts
 * Add support for Python 3.14
 * Remove support for Python 3.9
diff -r 24c543face12 -r 533b5582f166 modules/project/view/work_form.xml
--- a/modules/project/view/work_form.xml        Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project/view/work_form.xml        Wed Feb 25 15:25:02 2026 +0100
@@ -29,6 +29,8 @@
                 <label name="timesheet_end_date" string="End:"/>
                 <field name="timesheet_end_date" xexpand="0"/>
             </group>
+            <label name="origin"/>
+            <field name="origin"/>
             <newline/>
             <label name="effort_duration"/>
             <field name="effort_duration"/>
diff -r 24c543face12 -r 533b5582f166 modules/project/view/work_list.xml
--- a/modules/project/view/work_list.xml        Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project/view/work_list.xml        Wed Feb 25 15:25:02 2026 +0100
@@ -3,6 +3,7 @@
 this repository contains the full copyright notices and license terms. -->
 <tree sequence="sequence">
     <field name="company" expand="1" optional="1"/>
+    <field name="origin" expand="1" optional="1"/>
     <field name="number"/>
     <field name="rec_name" expand="1"/>
     <field name="timesheet_duration" optional="0"/>
diff -r 24c543face12 -r 533b5582f166 modules/project/view/work_list_children.xml
--- a/modules/project/view/work_list_children.xml       Fri Mar 27 18:36:21 
2026 +0100
+++ b/modules/project/view/work_list_children.xml       Wed Feb 25 15:25:02 
2026 +0100
@@ -2,6 +2,7 @@
 <!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
 this repository contains the full copyright notices and license terms. -->
 <tree sequence="sequence">
+    <field name="origin" expand="1" optional="1"/>
     <field name="name" expand="1">
         <prefix name="number"/>
     </field>
diff -r 24c543face12 -r 533b5582f166 modules/project/view/work_list_simple.xml
--- a/modules/project/view/work_list_simple.xml Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project/view/work_list_simple.xml Wed Feb 25 15:25:02 2026 +0100
@@ -3,6 +3,7 @@
 this repository contains the full copyright notices and license terms. -->
 <tree>
     <field name="company" expand="1" optional="1"/>
+    <field name="origin" expand="1" optional="1"/>
     <field name="number"/>
     <field name="rec_name" expand="1"/>
     <field name="type" optional="1"/>
diff -r 24c543face12 -r 533b5582f166 modules/project/view/work_tree.xml
--- a/modules/project/view/work_tree.xml        Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project/view/work_tree.xml        Wed Feb 25 15:25:02 2026 +0100
@@ -6,6 +6,7 @@
         <prefix name="number"/>
     </field>
     <field name="company" expand="1" optional="1"/>
+    <field name="origin" expand="1" optional="1"/>
     <field name="timesheet_duration" optional="0"/>
     <field name="total_effort" optional="0"/>
     <field name="type" optional="1"/>
diff -r 24c543face12 -r 533b5582f166 modules/project/view/work_tree_simple.xml
--- a/modules/project/view/work_tree_simple.xml Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project/view/work_tree_simple.xml Wed Feb 25 15:25:02 2026 +0100
@@ -6,6 +6,7 @@
         <prefix name="number"/>
     </field>
     <field name="company" expand="1" optional="1"/>
+    <field name="origin" expand="1" optional="1"/>
     <field name="type" optional="1"/>
     <field name="status" optional="0"/>
 </tree>
diff -r 24c543face12 -r 533b5582f166 modules/project/work.py
--- a/modules/project/work.py   Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project/work.py   Wed Feb 25 15:25:02 2026 +0100
@@ -152,8 +152,17 @@
             ('project', 'Project'),
             ('task', 'Task')
             ],
-        "Type", required=True)
-    company = fields.Many2One('company.company', "Company", required=True)
+        "Type", required=True,
+        domain=[
+            If(Eval('origin', None),
+                ('type', '=', 'task'),
+                ()),
+            ])
+    company = fields.Many2One(
+        'company.company', "Company", required=True,
+        states={
+            'readonly': Bool(Eval('origin', None)),
+            })
     number = fields.Char("Number", readonly=True)
     party = fields.Many2One('party.party', 'Party',
         states={
@@ -168,6 +177,9 @@
         states={
             'invisible': Eval('type') != 'project',
             })
+    origin = fields.Reference(
+        "Origin", selection='get_origins',
+        help="The source of the task.")
     timesheet_works = fields.One2Many(
         'timesheet.work', 'origin', 'Timesheet Works', readonly=True, size=1)
     timesheet_available = fields.Function(fields.Boolean(
@@ -261,6 +273,17 @@
         return Transaction().context.get('company')
 
     @classmethod
+    def _get_origins(cls):
+        return []
+
+    @classmethod
+    def get_origins(cls):
+        IrModel = Pool().get('ir.model')
+        get_name = IrModel.get_name
+        models = cls._get_origins()
+        return [(None, '')] + [(m, get_name(m)) for m in models]
+
+    @classmethod
     def default_status(cls):
         pool = Pool()
         WorkStatus = pool.get('project.work.status')
diff -r 24c543face12 -r 533b5582f166 modules/project_revenue/work.py
--- a/modules/project_revenue/work.py   Fri Mar 27 18:36:21 2026 +0100
+++ b/modules/project_revenue/work.py   Wed Feb 25 15:25:02 2026 +0100
@@ -12,7 +12,7 @@
 from trytond.modules.currency.fields import Monetary
 from trytond.modules.product import price_digits, round_price
 from trytond.pool import Pool, PoolMeta
-from trytond.pyson import Eval
+from trytond.pyson import Bool, Eval, If
 from trytond.transaction import Transaction
 
 
@@ -21,7 +21,13 @@
     product = fields.Many2One('product.product', 'Product',
         domain=[
             ('type', '=', 'service'),
+            If(Eval('origin', None),
+                ('id', '=', -1),
+                ()),
             ],
+        states={
+            'invisible': Bool(Eval('origin', None)),
+            },
         context={
             'company': Eval('company', -1),
             },

Reply via email to