Skip to content

Commit

Permalink
[IMP] ddmrp_sale: Adapt view to new Stock Buffer view design
Browse files Browse the repository at this point in the history
  • Loading branch information
BernatPForgeFlow committed May 8, 2023
1 parent 3ab8a24 commit 38d0fda
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 17 deletions.
61 changes: 46 additions & 15 deletions ddmrp_sale/models/stock_buffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ class StockBuffer(models.Model):
_inherit = "stock.buffer"

can_serve_sales = fields.Boolean(compute="_compute_can_serve_sales", store=True,)
qualified_demand_sale_order_line_ids = fields.Many2many(
comodel_name="sale.order.line",
)

def _get_sale_source_location(self):
self.ensure_one()
Expand Down Expand Up @@ -44,18 +47,46 @@ def _search_sales_qualified_demand(self):
so_lines = self.env["sale.order.line"].search(domain)
return so_lines

def _get_demand_by_days(self):
demand_by_days = super()._get_demand_by_days()
if self.can_serve_sales:
so_lines = self._search_sales_qualified_demand()

sol_dates = [dt.date() for dt in so_lines.mapped("commitment_date")]
for d in sol_dates:
if not demand_by_days.get(d):
demand_by_days[d] = 0.0
for sol in so_lines:
date = sol.commitment_date.date()
demand_by_days[date] += sol.product_uom._compute_quantity(
sol.product_uom_qty, sol.product_id.uom_id
)
return demand_by_days
def _get_so_lines_by_days(self, so_lines):
so_lines_by_days = {}
sol_dates = [dt.date() for dt in so_lines.mapped("commitment_date")]
for d in sol_dates:
if not so_lines_by_days.get(d):
so_lines_by_days[d] = 0.0
for sol in so_lines:
date = sol.commitment_date.date()
so_lines_by_days[date] += sol.product_uom._compute_quantity(
sol.product_uom_qty, sol.product_id.uom_id
)
return so_lines_by_days

def _calc_qualified_demand(self, current_date=False):
res = super()._calc_qualified_demand(current_date)
today = current_date or fields.date.today()
for rec in self:
if rec.can_serve_sales:
qualified_demand = 0.0
lines = rec._search_sales_qualified_demand()
so_lines_by_days = rec._get_so_lines_by_days(lines)
dates = list(set(so_lines_by_days.keys()))
for date in dates:
if (
so_lines_by_days.get(date, 0.0) >= rec.order_spike_threshold
or date <= today
):
qualified_demand += so_lines_by_days.get(date, 0.0)
else:
lines = lines.filtered(lambda x: x.commitment_date.date() != date)
rec.qualified_demand += qualified_demand
rec.qualified_demand_sale_order_line_ids = lines
return res

def action_view_qualified_demand_so_lines(self):
lines = self.qualified_demand_sale_order_line_ids
action = self.env.ref("sale.action_quotations")
result = action.read()[0]
result["context"] = {}
result["domain"] = [("id", "in", lines.mapped("order_id.id"))]
return result

Check warning on line 90 in ddmrp_sale/models/stock_buffer.py

View check run for this annotation

Codecov / codecov/patch

ddmrp_sale/models/stock_buffer.py#L85-L90

Added lines #L85 - L90 were not covered by tests


18 changes: 16 additions & 2 deletions ddmrp_sale/views/stock_buffer_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,23 @@
<field name="model">stock.buffer</field>
<field name="inherit_id" ref="ddmrp.stock_buffer_view_form" />
<field name="arch" type="xml">
<group name="misc_info" position="inside">
<xpath
expr="//div[@name='qualified_demand']"
position="inside"
class="o_row"
>
<field name="qualified_demand_sale_order_line_ids" invisible="1" />
<button
title="View Qualified Demand from SO Lines"
name="action_view_qualified_demand_so_lines"
icon="fa-search"
type="object"
attrs="{'invisible': [('qualified_demand_sale_order_line_ids', '=', [])]}"
/>
</xpath>
<field name="company_id" position="after">
<field name="can_serve_sales" />
</group>
</field>
</field>
</record>
</odoo>

0 comments on commit 38d0fda

Please sign in to comment.