Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[14.0][FIX] shopfloor_single_product_transfer: check package #758

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion shopfloor_single_product_transfer/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Shopfloor Single Product Transfer
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0c02f49273316c190e1d17d298f97dbb41f4bf80e1c5341091bb90fff4c0404f
!! source digest: sha256:6c68d48d21b7dec7174f3018b1d89dac0781c150792d1c3f70adfc7d39052b3a
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down Expand Up @@ -86,6 +86,7 @@ Contributors
~~~~~~~~~~~~

* Matthieu Méquignon <[email protected]>
* Michael Tietz (MT Software) <[email protected]>

Maintainers
~~~~~~~~~~~
Expand Down
1 change: 1 addition & 0 deletions shopfloor_single_product_transfer/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
* Matthieu Méquignon <[email protected]>
* Michael Tietz (MT Software) <[email protected]>
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright 2022 Camptocamp SA
# Copyright 2023 Michael Tietz (MT Software) <[email protected]>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)

import logging
Expand Down Expand Up @@ -578,7 +579,9 @@ def _valid_dest_location_for_menu(self):
domain = self._valid_dest_location_for_menu_domain()
return self.env["stock.location"].search(domain)

def _set_quantity__check_location(self, move_line, location, confirmation=False):
def _set_quantity__check_location(
self, move_line, location, package=None, confirmation=False
):
valid_locations_for_move_line = (
self._set_quantity__valid_dest_location_for_move_line(move_line)
)
Expand Down Expand Up @@ -693,14 +696,26 @@ def _set_quantity__by_location_handlers(self):
self._set_quantity__check_location,
]

def _set_quantity__by_location(self, move_line, location, confirmation=False):
def _set_quantity__by_location(
self, move_line, location, package=None, confirmation=False
):
# We're about to leave the `set_quantity` screen.
# First ensure that quantity is valid.
invalid_qty_response = self._set_quantity__check_quantity_done(move_line)
if invalid_qty_response:
return invalid_qty_response
move_line.result_package_id = False
# Do not remove the result_package_id
# when it was previously set by _set_quantity__by_package
# because _set_quantity__by_location will be then called
# with the scanned empty package
if not package:
move_line.result_package_id = False
handlers = self._set_quantity__by_location_handlers()
# At this point the result_package_id is already
# set by _set_quantity__by_package to scanned package
# or set to False by this method
# Because of this call the handlers without the package
# to ensure the move_line's result_package_id gets checked
response = self._use_handlers(
handlers, move_line, location, confirmation=confirmation
)
Expand All @@ -721,7 +736,11 @@ def _set_quantity__by_package(self, move_line, package, confirmation=False):
location = package.location_id
handlers = self._set_quantity__by_location_handlers()
response = self._use_handlers(
handlers, move_line, location, confirmation=confirmation
handlers,
move_line,
location,
package=package,
confirmation=confirmation,
)
if response:
return response
Expand Down Expand Up @@ -889,10 +908,10 @@ def set_location(self, selected_line_id, package_id, barcode):
}
search = self._actions_for("search")
search_result = search.find(barcode, types=handlers_by_type.keys())
package = self.env["stock.quant.package"].browse(package_id)
handler = handlers_by_type.get(search_result.type)
if handler:
return handler(move_line, search_result.record)
package = self.env["stock.quant.package"].browse(package_id)
return handler(move_line, search_result.record, package=package)
message = self.msg_store.barcode_not_found()
return self._response_for_set_location(move_line, package, message=message)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ <h1 class="title">Shopfloor Single Product Transfer</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:0c02f49273316c190e1d17d298f97dbb41f4bf80e1c5341091bb90fff4c0404f
!! source digest: sha256:6c68d48d21b7dec7174f3018b1d89dac0781c150792d1c3f70adfc7d39052b3a
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/wms/tree/14.0/shopfloor_single_product_transfer"><img alt="OCA/wms" src="https://img.shields.io/badge/github-OCA%2Fwms-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/wms-14-0/wms-14-0-shopfloor_single_product_transfer"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/wms&amp;target_branch=14.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>Allow to move a single product from a location to another one.</p>
Expand Down Expand Up @@ -435,6 +435,7 @@ <h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Matthieu Méquignon &lt;<a class="reference external" href="mailto:matthieu.mequignon&#64;camptocamp.com">matthieu.mequignon&#64;camptocamp.com</a>&gt;</li>
<li>Michael Tietz (MT Software) &lt;<a class="reference external" href="mailto:mtietz&#64;mt-software.de">mtietz&#64;mt-software.de</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
Expand Down
5 changes: 5 additions & 0 deletions shopfloor_single_product_transfer/tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,8 @@ def get_new_picking(cls):
@classmethod
def get_new_move(cls):
return cls.env["stock.move"].search([("id", "not in", cls.existing_move_ids)])

@classmethod
def _create_empty_package(cls, name=None):
name = name or "test-package"
return cls.env["stock.quant.package"].sudo().create({"name": name})
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def test_scan_location_ok(self):

def test_scan_location_stock_packages(self):
location = self.location_src
package = self.env["stock.quant.package"].sudo().create({})
package = self._create_empty_package()
for quant in location.quant_ids:
quant.sudo().package_id = package

Expand All @@ -87,7 +87,7 @@ def test_scan_location_stock_packages(self):

def test_scan_location_only_lines_with_package(self):
location = self.location_src
package = self.env["stock.quant.package"].sudo().create({})
package = self._create_empty_package()
for line in location.source_move_line_ids:
# There are no lines without a package in this location.
line.package_id = package
Expand Down
12 changes: 6 additions & 6 deletions shopfloor_single_product_transfer/tests/test_set_location.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ def _setup_picking(cls):
return cls._create_picking(lines=[(cls.product, 10)])

def test_set_location_ok(self):
package = (
self.env["stock.quant.package"].sudo().create({"name": "test-package"})
)
package = self._create_empty_package()
picking = self._setup_picking()
move_line = picking.move_line_ids
# _set_quantity__by_package sets the result_package_id
# ensure that the package is still set after set_location
move_line.result_package_id = package
location = self.dispatch_location
response = self.service.dispatch(
"set_location",
Expand All @@ -35,6 +36,7 @@ def test_set_location_ok(self):
"barcode": location.name,
},
)
self.assertEqual(move_line.result_package_id, package)
expected_message = self.msg_store.transfer_done_success(move_line.picking_id)
completion_info = self.service._actions_for("completion.info")
expected_popup = completion_info.popup(move_line)
Expand All @@ -48,9 +50,7 @@ def test_set_location_ok(self):
)

def test_set_location_barcode_not_found(self):
package = (
self.env["stock.quant.package"].sudo().create({"name": "test-package"})
)
package = self._create_empty_package()
picking = self._setup_picking()
move_line = picking.move_line_ids
response = self.service.dispatch(
Expand Down
10 changes: 4 additions & 6 deletions shopfloor_single_product_transfer/tests/test_set_quantity.py
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,7 @@ def test_set_quantity_scan_location(self):
self.assertEqual(picking.move_line_ids.product_uom_qty, 4.0)
self.assertEqual(picking.move_line_ids.qty_done, 0.0)
self.assertEqual(picking.move_line_ids.state, "assigned")
self.assertFalse(picking.move_line_ids.result_package_id)

def test_set_quantity_scan_location_allow_move_create(self):
self.menu.sudo().allow_move_create = True
Expand All @@ -732,6 +733,7 @@ def test_set_quantity_scan_location_allow_move_create(self):
)
# Change the destination on the move_line and take less than the total amount required.
move_line = picking.move_line_ids

self.service.dispatch(
"set_quantity",
params={
Expand All @@ -752,9 +754,7 @@ def test_set_quantity_scan_location_allow_move_create(self):
def test_set_quantity_scan_package_not_empty(self):
# We scan a package that's not empty
# and its location is selected.
package = (
self.env["stock.quant.package"].sudo().create({"name": "test-package"})
)
package = self._create_empty_package()
self.env["stock.quant"].sudo().create(
{
"package_id": package.id,
Expand Down Expand Up @@ -793,9 +793,7 @@ def test_set_quantity_scan_package_not_empty(self):
def test_set_quantity_scan_package_empty(self):
# We scan an empty package
# and are redirected to set_location.
package = (
self.env["stock.quant.package"].sudo().create({"name": "test-package"})
)
package = self._create_empty_package()
picking = self._setup_picking()
move_line = picking.move_line_ids
response = self.service.dispatch(
Expand Down
3 changes: 2 additions & 1 deletion shopfloor_single_product_transfer_force_package/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Shopfloor Single Product Transfer Force Select Package
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5c5fcdf15f9d541770a2f5b6662b44e8d9b213a07ddf924f8030465ffb46aa8f
!! source digest: sha256:e82edcbccff746daa3c4eb6aa9014931e7b70cc699598b4ab2752ee137708ec8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down Expand Up @@ -57,6 +57,7 @@ Contributors
~~~~~~~~~~~~

* Juan Miguel Sánchez Arce <[email protected]>
* Michael Tietz (MT Software) <[email protected]>

Maintainers
~~~~~~~~~~~
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
* Juan Miguel Sánchez Arce <[email protected]>
* Michael Tietz (MT Software) <[email protected]>
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright 2023 Camptocamp SA
# Copyright 2023 Michael Tietz (MT Software) <[email protected]>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)


Expand All @@ -8,12 +9,20 @@
class ShopfloorSingleProductTransfer(Component):
_inherit = "shopfloor.single.product.transfer"

def _set_quantity__check_location(self, move_line, location, confirmation=False):
def _set_quantity__check_location(
self, move_line, location, package=None, confirmation=False
):
# We add an additional check to verify if the location requires packages
# and return a message to the user accordingly.
if location.package_restriction and not move_line.result_package_id:
if (
location.package_restriction
and not package
and not move_line.result_package_id
):
message = self.msg_store.location_requires_package()
return self._response_for_set_quantity(
move_line, message=message, asking_confirmation=None
)
return super()._set_quantity__check_location(move_line, location, confirmation)
return super()._set_quantity__check_location(
move_line, location, package=package, confirmation=confirmation
)
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ <h1 class="title">Shopfloor Single Product Transfer Force Select Package</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5c5fcdf15f9d541770a2f5b6662b44e8d9b213a07ddf924f8030465ffb46aa8f
!! source digest: sha256:e82edcbccff746daa3c4eb6aa9014931e7b70cc699598b4ab2752ee137708ec8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/wms/tree/14.0/shopfloor_single_product_transfer_force_package"><img alt="OCA/wms" src="https://img.shields.io/badge/github-OCA%2Fwms-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/wms-14-0/wms-14-0-shopfloor_single_product_transfer_force_package"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/wms&amp;target_branch=14.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>Force the user to select a package if they scan a location which already contains packages.</p>
Expand Down Expand Up @@ -403,6 +403,7 @@ <h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Juan Miguel Sánchez Arce &lt;<a class="reference external" href="mailto:juan.sanchez&#64;camptocamp.com">juan.sanchez&#64;camptocamp.com</a>&gt;</li>
<li>Michael Tietz (MT Software) &lt;<a class="reference external" href="mailto:mtietz&#64;mt-software.de">mtietz&#64;mt-software.de</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ def test_force_package_mandatory_no_package(self):
def test_force_package_mandatory_with_package(self):
picking = self._setup_picking()
move_line = picking.move_line_ids
package = self.env["stock.quant.package"].sudo().create({})
move_line.result_package_id = package
package = self._create_empty_package()
self.dispatch_location.sudo().package_restriction = "singlepackage"
response = self.service.dispatch(
"set_quantity",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Shopfloor Single Product Transfer Unique Order Per Location
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:293d3465d5bee7cc00f12378573974df153d01784247d13d8f80373cdcb7121d
!! source digest: sha256:6009aa6960e9ba8bda6b2942b50f38fb7dd25cf7c0e1c9820f643c838e0ec0e9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down Expand Up @@ -60,6 +60,7 @@ Contributors
~~~~~~~~~~~~

* Thierry Ducrest <[email protected]>
* Michael Tietz (MT Software) <[email protected]>

Maintainers
~~~~~~~~~~~
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
* Thierry Ducrest <[email protected]>
* Michael Tietz (MT Software) <[email protected]>
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright 2023 Camptocamp SA
# Copyright 2023 Michael Tietz (MT Software) <[email protected]>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)

from odoo.exceptions import UserError
Expand All @@ -10,9 +11,11 @@ class ShopfloorSingleProductTransfer(Component):
_inherit = "shopfloor.single.product.transfer"

def _set_quantity__check_location(
self, move_line, location=False, confirmation=False
self, move_line, location=False, package=False, confirmation=False
):
res = super()._set_quantity__check_location(move_line, location, confirmation)
res = super()._set_quantity__check_location(
move_line, location, package=package, confirmation=confirmation
)
# Could also be asking for confirmation with a warning
if res and res.get("message", {}).get("message_type", "") == "error":
return res
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ <h1 class="title">Shopfloor Single Product Transfer Unique Order Per Location</h
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:293d3465d5bee7cc00f12378573974df153d01784247d13d8f80373cdcb7121d
!! source digest: sha256:6009aa6960e9ba8bda6b2942b50f38fb7dd25cf7c0e1c9820f643c838e0ec0e9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/wms/tree/14.0/shopfloor_single_product_transfer_unique_order_at_location"><img alt="OCA/wms" src="https://img.shields.io/badge/github-OCA%2Fwms-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/wms-14-0/wms-14-0-shopfloor_single_product_transfer_unique_order_at_location"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/wms&amp;target_branch=14.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>When installed, this module restricts transfer to some non empty location
Expand Down Expand Up @@ -406,6 +406,7 @@ <h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Thierry Ducrest &lt;<a class="reference external" href="mailto:thierry.ducrest&#64;camptocamp.com">thierry.ducrest&#64;camptocamp.com</a>&gt;</li>
<li>Michael Tietz (MT Software) &lt;<a class="reference external" href="mailto:mtietz&#64;mt-software.de">mtietz&#64;mt-software.de</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
Expand Down
Loading