mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-20 18:52:08 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
|
|
@ -0,0 +1 @@
|
|||
from . import stock_buffer
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
# Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com)
|
||||
# Copyright 2019-20 Camptocamp SA
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class StockBuffer(models.Model):
|
||||
_inherit = "stock.buffer"
|
||||
|
||||
route_ids = fields.Many2many(
|
||||
"stock.route",
|
||||
string="Allowed routes",
|
||||
compute="_compute_route_ids",
|
||||
)
|
||||
route_id = fields.Many2one(
|
||||
"stock.route",
|
||||
string="Route",
|
||||
domain="[('id', 'in', route_ids)]",
|
||||
ondelete="restrict",
|
||||
)
|
||||
|
||||
@api.depends("product_id", "warehouse_id", "warehouse_id.route_ids", "location_id")
|
||||
def _compute_route_ids(self):
|
||||
route_obj = self.env["stock.route"]
|
||||
for record in self:
|
||||
wh_routes = record.warehouse_id.route_ids
|
||||
routes = route_obj.browse()
|
||||
if record.product_id:
|
||||
routes += record.product_id.mapped(
|
||||
"route_ids"
|
||||
) | record.product_id.mapped("categ_id").mapped("total_route_ids")
|
||||
if record.warehouse_id:
|
||||
routes |= wh_routes
|
||||
parents = record.get_parents()
|
||||
record.route_ids = self._get_location_routes_of_parents(routes, parents)
|
||||
|
||||
def _get_location_routes_of_parents(self, routes, parents):
|
||||
return routes.filtered(
|
||||
lambda route: (
|
||||
# at least one rule of the route must have a destination location
|
||||
# reaching the buffer
|
||||
route.rule_ids.filtered(lambda rule: rule.action != "push").mapped(
|
||||
"location_dest_id"
|
||||
)
|
||||
& parents
|
||||
)
|
||||
or any(rule.action == "buy" for rule in route.rule_ids)
|
||||
)
|
||||
|
||||
def get_parents(self):
|
||||
location = self.location_id
|
||||
result = location
|
||||
while location.location_id:
|
||||
location = location.location_id
|
||||
result |= location
|
||||
return result
|
||||
|
||||
def _values_source_location_from_route(self):
|
||||
values = super()._values_source_location_from_route()
|
||||
if self.route_id:
|
||||
values["route_ids"] = self.route_id
|
||||
return values
|
||||
|
||||
def write(self, vals):
|
||||
res = super().write(vals)
|
||||
if "route_id" in vals:
|
||||
self._calc_distributed_source_location()
|
||||
return res
|
||||
Loading…
Add table
Add a link
Reference in a new issue