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),
},