From 6ea9cecbdcf5eae46cd388f949c09548867141a0 Mon Sep 17 00:00:00 2001 From: ntsirintanis Date: Mon, 5 Feb 2024 12:53:33 +0100 Subject: [PATCH] [UPD] server action for project.task --- project_forecast_line_priority/README.rst | 2 +- .../__manifest__.py | 2 +- .../data/ir_actions_server.xml | 16 +++++++++ .../models/project_task.py | 13 ++++--- .../models/res_config_settings.py | 27 ++++++++++++--- .../static/description/index.html | 2 +- .../views/res_config_settings.xml | 34 +++++++++++++++++++ 7 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 project_forecast_line_priority/data/ir_actions_server.xml diff --git a/project_forecast_line_priority/README.rst b/project_forecast_line_priority/README.rst index efb7dd908c..f0ed293a5e 100644 --- a/project_forecast_line_priority/README.rst +++ b/project_forecast_line_priority/README.rst @@ -7,7 +7,7 @@ Project Forecast Line Priority !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:0c7a75d90fd3e732909de3a75615d2b034c399f90748a81be1be2979a3d28d44 + !! source digest: sha256:091a78dee8b45f24db001b17ab2fd0a09ad9ca887e8f39d6135473126935afe8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/project_forecast_line_priority/__manifest__.py b/project_forecast_line_priority/__manifest__.py index be5ec4e7c9..4fd3ecb565 100644 --- a/project_forecast_line_priority/__manifest__.py +++ b/project_forecast_line_priority/__manifest__.py @@ -9,6 +9,6 @@ "category": "Project", "website": "https://github.com/OCA/project", "depends": ["project_forecast_line_deadline", "project_task_add_very_high"], - "data": ["views/res_config_settings.xml"], + "data": ["data/ir_actions_server.xml", "views/res_config_settings.xml"], "installable": True, } diff --git a/project_forecast_line_priority/data/ir_actions_server.xml b/project_forecast_line_priority/data/ir_actions_server.xml new file mode 100644 index 0000000000..824ce98891 --- /dev/null +++ b/project_forecast_line_priority/data/ir_actions_server.xml @@ -0,0 +1,16 @@ + + + + Project Task: Update forecast date end + + + action + code + + for record in records: + new_forecast_date_planned_end = record._get_forecast_date_planned() + if new_forecast_date_planned_end: + record.write({"forecast_date_planned_end": new_forecast_date_planned_end}) + + + diff --git a/project_forecast_line_priority/models/project_task.py b/project_forecast_line_priority/models/project_task.py index de0c6de4b8..096100dc83 100644 --- a/project_forecast_line_priority/models/project_task.py +++ b/project_forecast_line_priority/models/project_task.py @@ -15,21 +15,24 @@ def write(self, vals): return super().write(vals) if "priority" not in vals: return super().write(vals) - priority = int(vals.get("priority", 0)) + priority = vals.get("priority", -5) for this in self: # date deadline is set, so ignore this one if this.date_deadline: continue - # if priority is 0, do nothing - if priority < 1: + # if priority is not set, do nothing + if int(priority) < 0: continue - forecast_date_planned_end = self._get_forecast_date_planned(priority) + forecast_date_planned_end = self._get_forecast_date_planned( + priority=priority + ) if forecast_date_planned_end: vals["forecast_date_planned_end"] = forecast_date_planned_end return super().write(vals) - def _get_forecast_date_planned(self, priority): + def _get_forecast_date_planned(self, priority=None): config_model = self.env["ir.config_parameter"] + priority = priority or self.priority selection = config_model.get_param( "project_forecast_line_priority.priority_%s_selection" % priority ) diff --git a/project_forecast_line_priority/models/res_config_settings.py b/project_forecast_line_priority/models/res_config_settings.py index 514d5d56dd..70c39351f2 100644 --- a/project_forecast_line_priority/models/res_config_settings.py +++ b/project_forecast_line_priority/models/res_config_settings.py @@ -13,24 +13,33 @@ class ResConfigSettings(models.TransientModel): _inherit = "res.config.settings" + forecast_line_priority_0_date = fields.Date( + inverse="_inverse_forecast_line_priority_date_str" + ) + forecast_line_priority_0_date_str = fields.Char( + config_parameter="project_forecast_line_priority.priority_0_date" + ) forecast_line_priority_1_date = fields.Date( - inverse="_inverse_forecast_line_priority_1_date_str" + inverse="_inverse_forecast_line_priority_date_str" ) forecast_line_priority_1_date_str = fields.Char( config_parameter="project_forecast_line_priority.priority_1_date" ) forecast_line_priority_2_date = fields.Date( - inverse="_inverse_forecast_line_priority_1_date_str" + inverse="_inverse_forecast_line_priority_date_str" ) forecast_line_priority_2_date_str = fields.Char( config_parameter="project_forecast_line_priority.priority_2_date" ) forecast_line_priority_3_date = fields.Date( - inverse="_inverse_forecast_line_priority_1_date_str" + inverse="_inverse_forecast_line_priority_date_str" ) forecast_line_priority_3_date_str = fields.Char( config_parameter="project_forecast_line_priority.priority_3_date" ) + forecast_line_priority_0 = fields.Integer( + config_parameter="project_forecast_line_priority.priority_0_delta" + ) forecast_line_priority_1 = fields.Integer( config_parameter="project_forecast_line_priority.priority_1_delta" ) @@ -40,6 +49,12 @@ class ResConfigSettings(models.TransientModel): forecast_line_priority_3 = fields.Integer( config_parameter="project_forecast_line_priority.priority_3_delta" ) + forecast_line_priority_0_selection = fields.Selection( + TYPE_FORECAST_ENDDATE, + default="none", + config_parameter="project_forecast_line_priority.priority_0_selection", + required=True, + ) forecast_line_priority_1_selection = fields.Selection( TYPE_FORECAST_ENDDATE, default="none", @@ -59,10 +74,14 @@ class ResConfigSettings(models.TransientModel): required=True, ) - def _inverse_forecast_line_priority_1_date_str(self): + def _inverse_forecast_line_priority_date_str(self): """As config_parameters does not accept Date field, we store the date formated string into a Char config field""" for setting in self: + if setting.forecast_line_priority_0_date: + setting.forecast_line_priority_0_date_str = fields.Date.to_string( + setting.forecast_line_priority_0_date + ) if setting.forecast_line_priority_1_date: setting.forecast_line_priority_1_date_str = fields.Date.to_string( setting.forecast_line_priority_1_date diff --git a/project_forecast_line_priority/static/description/index.html b/project_forecast_line_priority/static/description/index.html index 1f1b1cb586..fb554c51e0 100644 --- a/project_forecast_line_priority/static/description/index.html +++ b/project_forecast_line_priority/static/description/index.html @@ -367,7 +367,7 @@

Project Forecast Line Priority

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:0c7a75d90fd3e732909de3a75615d2b034c399f90748a81be1be2979a3d28d44 +!! source digest: sha256:091a78dee8b45f24db001b17ab2fd0a09ad9ca887e8f39d6135473126935afe8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/project Translate me on Weblate Try me on Runboat

This module recomputes forecast line end dates based on the priority of connected task(s)

diff --git a/project_forecast_line_priority/views/res_config_settings.xml b/project_forecast_line_priority/views/res_config_settings.xml index a7eabbbbb7..b87e99d195 100644 --- a/project_forecast_line_priority/views/res_config_settings.xml +++ b/project_forecast_line_priority/views/res_config_settings.xml @@ -21,6 +21,40 @@ class="col-12 col-lg-6 o_setting_box" id="forecast_line_priority_settings" > +
+ Priority 0 + +
+
+ + + +
+
+
+
+
Priority 1