Skip to content

Commit

Permalink
Add shopfloor_location_package_restriction
Browse files Browse the repository at this point in the history
Finally it only contains tests so could be rename or better removed.
  • Loading branch information
TDu committed Oct 17, 2023
1 parent 6ac2d67 commit c0b26dc
Show file tree
Hide file tree
Showing 9 changed files with 154 additions and 0 deletions.
6 changes: 6 additions & 0 deletions setup/shopfloor_location_package_restriction/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
Empty file.
18 changes: 18 additions & 0 deletions shopfloor_location_package_restriction/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)

{
"name": "Shopfloor Location Package Restriction",
"summary": "Glue module between shopfloor and location package restriction",
"version": "14.0.1.0.0",
"category": "Inventory",
"website": "https://github.com/OCA/wms",
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
"depends": [
"shopfloor",
# OCA/stock-logistics-warehouse
"stock_location_package_restriction",
],
"auto_install": True,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Thierry Ducrest <[email protected]>
7 changes: 7 additions & 0 deletions shopfloor_location_package_restriction/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Glue module between `shopfloor` and `stock_location_package_restriction`.
It allows to send proper error message to the frontend instead of a stack
trace error being displayed.

Finally his only use is to test.

Should be removed.
2 changes: 2 additions & 0 deletions shopfloor_location_package_restriction/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import test_single_pack_transfer_force_package
from . import test_zone_picking_force_package
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)

from odoo.addons.shopfloor.tests.test_single_pack_transfer_base import (
SinglePackTransferCommonBase,
)


class TestSinglePackTransferForcePackage(SinglePackTransferCommonBase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Prepare the pack and related picking has started
cls.pack_a = cls.env["stock.quant.package"].create(
{"location_id": cls.stock_location.id}
)
cls.quant_a = (
cls.env["stock.quant"]
.sudo()
.create(
{
"product_id": cls.product_a.id,
"location_id": cls.shelf1.id,
"quantity": 1,
"package_id": cls.pack_a.id,
}
)
)
cls.picking = cls._create_initial_move(lines=[(cls.product_a, 1)])
cls.move_line = cls.picking.move_line_ids
cls.package_level = cls.move_line.package_level_id
cls.package_level.is_done = True
cls.picking.move_line_ids.qty_done = 1
# Add restriction on destination location
cls.shelf2.sudo().package_restriction = "singlepackage"
# Add a package on the destination location
cls.pack_1 = cls.env["stock.quant.package"].create(
{"location_id": cls.shelf2.id}
)
cls._update_qty_in_location(
cls.shelf2,
cls.product_a,
1,
package=cls.pack_1,
)

def test_scan_location_has_restrictions(self):
""" """
response = self.service.dispatch(
"validate",
params={
"package_level_id": self.package_level.id,
"location_barcode": self.shelf2.barcode,
},
)
message = {
"message_type": "error",
"body": (
f"Only one package is allowed on the location "
f"{self.shelf2.display_name}.You cannot add "
f"the {self.move_line.package_id.name}, there is already {self.pack_1.name}."
),
}
self.assert_response(
response,
next_state="scan_location",
data=self.ANY,
message=message,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)

from odoo.addons.shopfloor.tests.test_zone_picking_base import ZonePickingCommonCase


class TestZonePickingForcePackage(ZonePickingCommonCase):
def setUp(self):
super().setUp()
self.service.work.current_picking_type = self.picking1.picking_type_id

def test_set_destination_location_package_restriction(self):
"""Check error restriction on location is properly forwarded to frontend."""
# Add a restriction on the location
self.packing_location.sudo().package_restriction = "singlepackage"
# Add a first package on the location
self.pack_1 = self.env["stock.quant.package"].create(
{"location_id": self.packing_location.id}
)
self._update_qty_in_location(
self.packing_location, self.product_a, 1, package=self.pack_1
)
picking_type = self.picking1.picking_type_id
move_line = self.picking1.move_lines.move_line_ids
move_line.qty_done = move_line.product_uom_qty
response = self.service.dispatch(
"set_destination",
params={
"move_line_id": move_line.id,
"barcode": self.packing_location.barcode,
"quantity": move_line.product_uom_qty,
"confirmation": False,
},
)
message = {
"message_type": "error",
"body": (
f"Only one package is allowed on the location "
f"{self.packing_location.display_name}.You cannot add "
f"the {move_line.package_id.name}, there is already {self.pack_1.name}."
),
}
self.assert_response_set_line_destination(
response,
self.zone_location,
picking_type,
move_line,
message=message,
qty_done=10.0,
)

0 comments on commit c0b26dc

Please sign in to comment.