mirror of
https://github.com/ForgeFlow/stock-rma.git
synced 2025-01-21 12:57:49 +02:00
[IMP] rma: hook _check_entire_pack
This commit is contained in:
@@ -3,3 +3,4 @@
|
|||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
from . import wizards
|
from . import wizards
|
||||||
|
from .hooks import post_load_hook
|
||||||
|
|||||||
@@ -36,4 +36,5 @@
|
|||||||
],
|
],
|
||||||
"installable": True,
|
"installable": True,
|
||||||
"application": True,
|
"application": True,
|
||||||
|
"post_load": "post_load_hook",
|
||||||
}
|
}
|
||||||
|
|||||||
78
rma/hooks.py
Normal file
78
rma/hooks.py
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Copyright 2024 ForgeFlow, S.L.
|
||||||
|
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
||||||
|
from odoo.addons.stock.models.stock_picking import Picking
|
||||||
|
|
||||||
|
|
||||||
|
# flake8: noqa: C901
|
||||||
|
def post_load_hook():
|
||||||
|
def _check_entire_pack(self):
|
||||||
|
"""This function check if entire packs are moved in the picking"""
|
||||||
|
for picking in self:
|
||||||
|
origin_packages = picking.move_line_ids.mapped("package_id")
|
||||||
|
for pack in origin_packages:
|
||||||
|
if picking._check_move_lines_map_quant_package(pack):
|
||||||
|
package_level_ids = picking.package_level_ids.filtered(
|
||||||
|
lambda pl: pl.package_id == pack
|
||||||
|
)
|
||||||
|
move_lines_to_pack = picking.move_line_ids.filtered(
|
||||||
|
lambda ml: ml.package_id == pack
|
||||||
|
and not ml.result_package_id
|
||||||
|
and ml.state not in ("done", "cancel")
|
||||||
|
)
|
||||||
|
if not package_level_ids:
|
||||||
|
package_location = (
|
||||||
|
self._get_entire_pack_location_dest(move_lines_to_pack)
|
||||||
|
or picking.location_dest_id.id
|
||||||
|
)
|
||||||
|
self.env["stock.package_level"].with_context(
|
||||||
|
bypass_reservation_update=package_location
|
||||||
|
).create(
|
||||||
|
{
|
||||||
|
"picking_id": picking.id,
|
||||||
|
"package_id": pack.id,
|
||||||
|
"location_id": pack.location_id.id,
|
||||||
|
"location_dest_id": package_location,
|
||||||
|
"move_line_ids": [(6, 0, move_lines_to_pack.ids)],
|
||||||
|
"company_id": picking.company_id.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# Propagate the result package in the next move for disposable packages only.
|
||||||
|
# Start Hook
|
||||||
|
if (
|
||||||
|
pack.package_use == "disposable"
|
||||||
|
and pack.location_id.usage != "customer"
|
||||||
|
):
|
||||||
|
# End Hook
|
||||||
|
move_lines_to_pack.with_context(
|
||||||
|
bypass_reservation_update=package_location
|
||||||
|
).write({"result_package_id": pack.id})
|
||||||
|
|
||||||
|
else:
|
||||||
|
move_lines_in_package_level = move_lines_to_pack.filtered(
|
||||||
|
lambda ml: ml.move_id.package_level_id
|
||||||
|
)
|
||||||
|
move_lines_without_package_level = (
|
||||||
|
move_lines_to_pack - move_lines_in_package_level
|
||||||
|
)
|
||||||
|
|
||||||
|
if pack.package_use == "disposable":
|
||||||
|
(
|
||||||
|
move_lines_in_package_level
|
||||||
|
| move_lines_without_package_level
|
||||||
|
).result_package_id = pack
|
||||||
|
move_lines_in_package_level.result_package_id = pack
|
||||||
|
for ml in move_lines_in_package_level:
|
||||||
|
ml.package_level_id = ml.move_id.package_level_id.id
|
||||||
|
|
||||||
|
move_lines_without_package_level.package_level_id = (
|
||||||
|
package_level_ids[0]
|
||||||
|
)
|
||||||
|
for pl in package_level_ids:
|
||||||
|
pl.location_dest_id = (
|
||||||
|
self._get_entire_pack_location_dest(pl.move_line_ids)
|
||||||
|
or picking.location_dest_id.id
|
||||||
|
)
|
||||||
|
|
||||||
|
if not hasattr(Picking, "_check_entire_pack_original"):
|
||||||
|
Picking._check_entire_pack_original = Picking._check_entire_pack
|
||||||
|
Picking._check_entire_pack = _check_entire_pack
|
||||||
Reference in New Issue
Block a user