Skip to content

Commit

Permalink
[IMP] stock_buffer_route: Do not consider other locations Buy routes
Browse files Browse the repository at this point in the history
Considering all buy routes should not be the default behaviour. If this is needed should be in a customized module.
  • Loading branch information
BernatPForgeFlow committed Sep 26, 2023
1 parent a6d37bb commit b6e8f17
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 12 deletions.
2 changes: 2 additions & 0 deletions stock_buffer_route/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
from . import mrp_production
from . import purchase_order
from . import stock_buffer
42 changes: 42 additions & 0 deletions stock_buffer_route/models/mrp_production.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copyright 2023 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).

from odoo import models


class MrpProduction(models.Model):
_inherit = "mrp.production"

def _get_domain_buffer_link_alternative(self, warehouse_level=False):
self.ensure_one()

Check warning on line 11 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L11

Added line #L11 was not covered by tests
if not warehouse_level:
locations = self.env["stock.location"].search(

Check warning on line 13 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L13

Added line #L13 was not covered by tests
[("id", "child_of", [self.location_dest_id.id])]
)
return [

Check warning on line 16 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L16

Added line #L16 was not covered by tests
("product_id", "=", self.product_id.id),
("company_id", "=", self.company_id.id),
("item_type_alternative", "=", "manufactured"),
("location_id", "in", locations.ids),
]
else:
return [

Check warning on line 23 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L23

Added line #L23 was not covered by tests
("product_id", "=", self.product_id.id),
("company_id", "=", self.company_id.id),
("item_type_alternative", "=", "manufactured"),
("warehouse_id", "=", self.picking_type_id.warehouse_id.id),
]

def _find_buffer_link(self):
res = super()._find_buffer_link()
buffer_model = self.env["stock.buffer"]

Check warning on line 32 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L31-L32

Added lines #L31 - L32 were not covered by tests
for rec in self.filtered(lambda r: not r.buffer_id):
domain = rec._get_domain_buffer_link_alternative()
buffer = buffer_model.search(domain, limit=1)

Check warning on line 35 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L34-L35

Added lines #L34 - L35 were not covered by tests
if not buffer:
domain = rec._get_domain_buffer_link_alternative(warehouse_level=True)
buffer = buffer_model.search(domain, limit=1)
rec.buffer_id = buffer

Check warning on line 39 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L37-L39

Added lines #L37 - L39 were not covered by tests
if buffer:
rec._calc_execution_priority()
return res

Check warning on line 42 in stock_buffer_route/models/mrp_production.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/mrp_production.py#L41-L42

Added lines #L41 - L42 were not covered by tests
38 changes: 38 additions & 0 deletions stock_buffer_route/models/purchase_order.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Copyright 2023 ForgeFlow S.L. (https://www.forgeflow.com)
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).

from odoo import models


class PurchaseOrderLine(models.Model):
_inherit = "purchase.order.line"

def _get_domain_buffer_link_alternative(self):
self.ensure_one()

Check warning on line 11 in stock_buffer_route/models/purchase_order.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/purchase_order.py#L11

Added line #L11 was not covered by tests
if not self.product_id:
# Return impossible domain -> no buffer.
return [(0, "=", 1)]
return [

Check warning on line 15 in stock_buffer_route/models/purchase_order.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/purchase_order.py#L14-L15

Added lines #L14 - L15 were not covered by tests
("product_id", "=", self.product_id.id),
("company_id", "=", self.order_id.company_id.id),
("item_type_alternative", "=", "purchased"),
("warehouse_id", "=", self.order_id.picking_type_id.warehouse_id.id),
]

def _find_buffer_link(self):
res = super()._find_buffer_link()
buffer_model = self.env["stock.buffer"]
move_model = self.env["stock.move"]

Check warning on line 25 in stock_buffer_route/models/purchase_order.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/purchase_order.py#L23-L25

Added lines #L23 - L25 were not covered by tests
for rec in self.filtered(lambda r: not r.buffer_ids):
mto_move = move_model.search(

Check warning on line 27 in stock_buffer_route/models/purchase_order.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/purchase_order.py#L27

Added line #L27 was not covered by tests
[("created_purchase_line_id", "=", rec.id)], limit=1
)
if mto_move:
# MTO lines are not accounted in MTS stock buffers.
continue
domain = rec._get_domain_buffer_link_alternative()
buffer = buffer_model.search(domain, limit=1)

Check warning on line 34 in stock_buffer_route/models/purchase_order.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/purchase_order.py#L32-L34

Added lines #L32 - L34 were not covered by tests
if buffer:
rec.buffer_ids = buffer
rec._calc_execution_priority()
return res

Check warning on line 38 in stock_buffer_route/models/purchase_order.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/purchase_order.py#L36-L38

Added lines #L36 - L38 were not covered by tests
29 changes: 17 additions & 12 deletions stock_buffer_route/models/stock_buffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class StockBuffer(models.Model):
"stock.location.route",
string="Allowed routes",
compute="_compute_route_ids",
store=True,
)
route_id = fields.Many2one(
"stock.location.route",
Expand Down Expand Up @@ -109,16 +110,21 @@ def _compute_main_supplier(self):
rec.main_supplier_id = suppliers[0].name if suppliers else False

Check warning on line 110 in stock_buffer_route/models/stock_buffer.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/stock_buffer.py#L109-L110

Added lines #L109 - L110 were not covered by tests
return res

def _calc_incoming_dlt_qty(self):
res = super()._calc_incoming_dlt_qty()
for rec in self:
if rec.item_type_alternative == "purchased":
cut_date = rec._get_incoming_supply_date_limit()
pols = rec.purchase_line_ids.filtered(
lambda l: l.date_planned > fields.Datetime.to_datetime(cut_date)
def _get_rfq_dlt_qty(self, outside_dlt=False):
res = super()._get_rfq_dlt_qty(outside_dlt)

Check warning on line 114 in stock_buffer_route/models/stock_buffer.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/stock_buffer.py#L114

Added line #L114 was not covered by tests
if self.item_type_alternative == "purchased":
cut_date = self._get_incoming_supply_date_limit()

Check warning on line 116 in stock_buffer_route/models/stock_buffer.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/stock_buffer.py#L116

Added line #L116 was not covered by tests
if not outside_dlt:
pols = self.purchase_line_ids.filtered(
lambda l: l.date_planned <= fields.Datetime.to_datetime(cut_date)
and l.state in ("draft", "sent")
)
rec.rfq_outside_dlt_qty = sum(pols.mapped("product_qty"))
else:
pols = self.purchase_line_ids.filtered(
lambda l: l.date_planned > fields.Datetime.to_datetime(cut_date)
and l.order_id.state in ("draft", "sent")
)
res += sum(pols.mapped("product_qty"))
return res

Check warning on line 128 in stock_buffer_route/models/stock_buffer.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/stock_buffer.py#L127-L128

Added lines #L127 - L128 were not covered by tests

def _get_date_planned(self, force_lt=None):
Expand All @@ -145,7 +151,6 @@ def _get_location_routes_of_parents(self, routes, parents):
)
& parents
)
or any(rule.action == "buy" for rule in route.rule_ids)
)

def get_parents(self):
Expand Down Expand Up @@ -200,11 +205,11 @@ def write(self, vals):
self._calc_distributed_source_location()
return res

def action_view_supply(self, outside_dlt=False, view_rfq=False):
res = super().action_view_supply(outside_dlt, view_rfq)
def action_view_supply(self, outside_dlt=False):
res = super().action_view_supply(outside_dlt)

Check warning on line 209 in stock_buffer_route/models/stock_buffer.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/stock_buffer.py#L209

Added line #L209 was not covered by tests
# If route is set it means that there is at least two alternatively ways to
# procure the buffer. Therefore, we will show Stock Pickings.
if self.route_id and not view_rfq:
if self.route_id:
moves = self._search_stock_moves_incoming(outside_dlt)
picks = moves.mapped("picking_id")
res = self.env["ir.actions.actions"]._for_xml_id(

Check warning on line 215 in stock_buffer_route/models/stock_buffer.py

View check run for this annotation

Codecov / codecov/patch

stock_buffer_route/models/stock_buffer.py#L213-L215

Added lines #L213 - L215 were not covered by tests
Expand Down

0 comments on commit b6e8f17

Please sign in to comment.