From 8793d9c80a3004d237c7de4d152140c2885b420c Mon Sep 17 00:00:00 2001 From: ThiagoMForgeFlow Date: Fri, 19 Apr 2024 12:19:50 +0200 Subject: [PATCH] [IMP] ddmrp_report_part_flow_index: change the way flow index is assigned to buffers --- .../models/ddmrp_flow_index_group.py | 4 ++ .../models/stock_buffer.py | 40 ++++++++++++++++++- .../views/ddmrp_flow_index_group_views.xml | 6 +++ .../views/stock_buffer_view.xml | 4 +- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/ddmrp_report_part_flow_index/models/ddmrp_flow_index_group.py b/ddmrp_report_part_flow_index/models/ddmrp_flow_index_group.py index 0e913c11f..93e1ced60 100644 --- a/ddmrp_report_part_flow_index/models/ddmrp_flow_index_group.py +++ b/ddmrp_report_part_flow_index/models/ddmrp_flow_index_group.py @@ -6,10 +6,14 @@ class DdmrpFlowIndexGroup(models.Model): _name = "ddmrp.flow.index.group" + _order = "sequence, id" name = fields.Char(required=True) summary = fields.Text() active = fields.Boolean(default=True) + lower_range = fields.Float(help="Lower range used to assign in stock buffer") + upper_range = fields.Float(help="Upper range used to assign in stock buffer") + sequence = fields.Integer(required=True) def toggle_active(self): for record in self: diff --git a/ddmrp_report_part_flow_index/models/stock_buffer.py b/ddmrp_report_part_flow_index/models/stock_buffer.py index a4ce4b54e..ab6234e8c 100644 --- a/ddmrp_report_part_flow_index/models/stock_buffer.py +++ b/ddmrp_report_part_flow_index/models/stock_buffer.py @@ -8,5 +8,43 @@ class StockBuffer(models.Model): _inherit = "stock.buffer" flow_index_group_id = fields.Many2one( - "ddmrp.flow.index.group", string="Flow Index Group" + "ddmrp.flow.index.group", string="Flow Index Group", readonly=True ) + + def _calc_flow_index_group_id(self): + flow_index_reports = self.env["report.ddmrp.part.plan.flow.index"].read_group( + domain=[("buffer_id", "in", self.ids)], + fields=["order_frequency_group"], + groupby=["buffer_id"], + ) + flow_index_groups = self.env["ddmrp.flow.index.group"].search([]) + for rec in self: + flow_index_report = list( + filter(lambda x: x["buffer_id"][0] == rec.id, flow_index_reports) + ) + if not flow_index_report: + continue + + frequency_group = flow_index_report[0]["order_frequency_group"] + for index_group in flow_index_groups: + if index_group.upper_range and index_group.lower_range: + if ( + index_group.lower_range + <= frequency_group + <= index_group.upper_range + ): + rec.flow_index_group_id = index_group + break + elif index_group.upper_range: + if index_group.upper_range >= frequency_group: + rec.flow_index_group_id = index_group + break + elif index_group.lower_range: + if frequency_group >= index_group.lower_range: + rec.flow_index_group_id = index_group + break + + def cron_actions(self, only_nfp=False): + res = super().cron_actions(only_nfp=only_nfp) + self._calc_flow_index_group_id() + return res diff --git a/ddmrp_report_part_flow_index/views/ddmrp_flow_index_group_views.xml b/ddmrp_report_part_flow_index/views/ddmrp_flow_index_group_views.xml index 458ac6e0f..2f1932364 100644 --- a/ddmrp_report_part_flow_index/views/ddmrp_flow_index_group_views.xml +++ b/ddmrp_report_part_flow_index/views/ddmrp_flow_index_group_views.xml @@ -8,7 +8,10 @@ ddmrp.flow.index.group + + + @@ -29,6 +32,9 @@ + + + diff --git a/ddmrp_report_part_flow_index/views/stock_buffer_view.xml b/ddmrp_report_part_flow_index/views/stock_buffer_view.xml index 5a074c2dd..b50fb13ac 100644 --- a/ddmrp_report_part_flow_index/views/stock_buffer_view.xml +++ b/ddmrp_report_part_flow_index/views/stock_buffer_view.xml @@ -8,9 +8,9 @@ stock.buffer - + - +