Skip to content

Commit

Permalink
[UPD] selection field in res.config.settings
Browse files Browse the repository at this point in the history
  • Loading branch information
ntsirintanis committed Feb 2, 2024
1 parent 5f7eb1b commit 4f91e69
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 42 deletions.
39 changes: 22 additions & 17 deletions project_forecast_line_priority/models/project_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,35 @@ def write(self, vals):
return super().write(vals)
if "priority" not in vals:
return super().write(vals)
config_model = self.env["ir.config_parameter"]
priority = int(vals.get("priority", 0))
today = fields.Date.today()
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:
continue
if priority == 1:
# add weeks to end date
vals["forecast_date_planned_end"] = config_model.get_param(
"project_forecast_line_priority.priority_1"
)
else:
# priorities 2 and 3
# add days to end date
interval = timedelta(
days=int(
config_model.get_param(
"project_forecast_line_priority.priority_%s" % priority
)
forecast_date_planned_end = self._get_forecast_date_planned(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):
config_model = self.env["ir.config_parameter"]
selection = config_model.get_param(
"project_forecast_line_priority.priority_%s_selection" % priority
)
if selection == "none":
return False
if selection == "delta":
return fields.Date.today() + timedelta(
days=int(
config_model.get_param(
"project_forecast_line_priority.priority_%s_delta" % priority
)
)
vals["forecast_date_planned_end"] = today + interval
return super().write(vals)
)
if selection == "date":
return config_model.get_param(
"project_forecast_line_priority.priority_%s_date" % priority
)
57 changes: 52 additions & 5 deletions project_forecast_line_priority/models/res_config_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,75 @@

from odoo import fields, models

TYPE_FORECAST_ENDDATE = [
("none", "None"),
("date", "Date"),
("delta", "Delta (in days)"),
]


class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"

forecast_line_priority_1_date = fields.Date(
inverse="_inverse__compute_forecast_line_priority_1_date_str"
inverse="_inverse_forecast_line_priority_1_date_str"
)
forecast_line_priority_1_date_str = fields.Char(
config_parameter="project_forecast_line_priority.priority_1"
config_parameter="project_forecast_line_priority.priority_1_date"
)
forecast_line_priority_2_date = fields.Date(
inverse="_inverse_forecast_line_priority_1_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"
)
forecast_line_priority_3_date_str = fields.Char(
config_parameter="project_forecast_line_priority.priority_3_date"
)
forecast_line_priority_1 = fields.Integer(
config_parameter="project_forecast_line_priority.priority_1_delta"
)
forecast_line_priority_2 = fields.Integer(
config_parameter="project_forecast_line_priority.priority_2"
config_parameter="project_forecast_line_priority.priority_2_delta"
)
forecast_line_priority_3 = fields.Integer(
config_parameter="project_forecast_line_priority.priority_3"
config_parameter="project_forecast_line_priority.priority_3_delta"
)
forecast_line_priority_1_selection = fields.Selection(
TYPE_FORECAST_ENDDATE,
default="none",
config_parameter="project_forecast_line_priority.priority_1_selection",
required=True,
)
forecast_line_priority_2_selection = fields.Selection(
TYPE_FORECAST_ENDDATE,
default="none",
config_parameter="project_forecast_line_priority.priority_2_selection",
required=True,
)
forecast_line_priority_3_selection = fields.Selection(
TYPE_FORECAST_ENDDATE,
default="none",
config_parameter="project_forecast_line_priority.priority_3_selection",
required=True,
)

def _inverse__compute_forecast_line_priority_1_date_str(self):
def _inverse_forecast_line_priority_1_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_1_date:
setting.forecast_line_priority_1_date_str = fields.Date.to_string(
setting.forecast_line_priority_1_date
)
if setting.forecast_line_priority_2_date:
setting.forecast_line_priority_2_date_str = fields.Date.to_string(
setting.forecast_line_priority_2_date
)
if setting.forecast_line_priority_3_date:
setting.forecast_line_priority_3_date_str = fields.Date.to_string(
setting.forecast_line_priority_3_date
)
84 changes: 64 additions & 20 deletions project_forecast_line_priority/views/res_config_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,58 +24,102 @@
<div class="o_setting_right_pane">
<span class="o_form_label">Priority 1</span>
<span class="fa fa-lg fa-star" role="img" />
<div class="text-muted">
Set Forecast End Date
</div>
<div class="content-group">
<div class="mt16 row">
<field
name="forecast_line_priority_1_selection"
/>
<field
name="forecast_line_priority_1"
class="oe_inline"
attrs="{'invisible': [('forecast_line_priority_1_selection','!=', 'delta')]}"
/>
<field
name="forecast_line_priority_1_date"
class="oe_inline"
attrs="{'invisible': [('forecast_line_priority_1_selection','!=', 'date')]}"
placeholder="Set Date"
/>
</div>
<div class="mt16 row">
<div
attrs="{'invisible': [('forecast_line_priority_1_selection','!=', 'date')]}"
>
<label
for="forecast_line_priority_1_date_str"
string="Current:"
class="col-3 col-lg-3 o_light_label"
/>
for="forecast_line_priority_1_date_str"
string="Current Date"
/>
<field
name="forecast_line_priority_1_date_str"
readonly="1"
/>
name="forecast_line_priority_1_date_str"
readonly="1"
/>
</div>
</div>
</div>
</div>
<div class="o_setting_right_pane">
<span class="o_form_label">Priority 2</span>
<span class="fa fa-lg fa-star" role="img" />
<div class="text-muted">
Set timedelta in days
</div>
<div class="content-group">
<div class="mt16 row">
<field
name="forecast_line_priority_2_selection"
/>
<field
name="forecast_line_priority_2"
class="oe_inline"
required="1"
attrs="{'invisible': [('forecast_line_priority_2_selection','!=', 'delta')]}"
/>
<field
name="forecast_line_priority_2_date"
class="oe_inline"
attrs="{'invisible': [('forecast_line_priority_2_selection','!=', 'date')]}"
placeholder="Set Date"
/>
<div
attrs="{'invisible': [('forecast_line_priority_2_selection','!=', 'date')]}"
>
<label
for="forecast_line_priority_2_date_str"
string="Current Date"
/>
<field
name="forecast_line_priority_2_date_str"
readonly="1"
/>
</div>
</div>
</div>
</div>
<div class="o_setting_right_pane">
<span class="o_form_label">Priority 3</span>
<span class="fa fa-lg fa-star" role="img" />
<div class="text-muted">
Set timedelta in days
</div>
<div class="content-group">
<div class="mt16 row">
<field
name="forecast_line_priority_3_selection"
/>
<field
name="forecast_line_priority_3"
class="oe_inline"
required="1"
attrs="{'invisible': [('forecast_line_priority_3_selection','!=', 'delta')]}"
/>
<field
name="forecast_line_priority_3_date"
class="oe_inline"
attrs="{'invisible': [('forecast_line_priority_3_selection','!=', 'date')]}"
placeholder="Set Date"
/>
<div
attrs="{'invisible': [('forecast_line_priority_3_selection','!=', 'date')]}"
>
<label
for="forecast_line_priority_3_date_str"
string="Current Date"
/>
<field
name="forecast_line_priority_3_date_str"
readonly="1"
/>
</div>
</div>
</div>
</div>
Expand Down

0 comments on commit 4f91e69

Please sign in to comment.