odoo-addon-shopfloor 18.0.0.3.1__py3-none-any.whl → 18.0.0.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/shopfloor/README.rst +1 -1
- odoo/addons/shopfloor/__manifest__.py +1 -1
- odoo/addons/shopfloor/actions/stock.py +14 -1
- odoo/addons/shopfloor/services/cluster_picking.py +15 -8
- odoo/addons/shopfloor/static/description/index.html +1 -1
- odoo/addons/shopfloor/tests/__init__.py +13 -13
- odoo/addons/shopfloor/tests/test_cluster_picking_base.py +1 -1
- odoo/addons/shopfloor/tests/test_cluster_picking_change_pack_lot.py +1 -1
- odoo/addons/shopfloor/tests/test_cluster_picking_is_zero.py +5 -2
- odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination.py +17 -17
- odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination_no_prefill_qty.py +15 -15
- odoo/addons/shopfloor/tests/test_cluster_picking_scan_line.py +2 -2
- odoo/addons/shopfloor/tests/test_cluster_picking_stock_issue.py +3 -2
- odoo/addons/shopfloor/tests/test_cluster_picking_unload.py +59 -15
- odoo/addons/shopfloor/tests/test_stock_split.py +3 -1
- {odoo_addon_shopfloor-18.0.0.3.1.dist-info → odoo_addon_shopfloor-18.0.0.5.0.dist-info}/METADATA +2 -2
- {odoo_addon_shopfloor-18.0.0.3.1.dist-info → odoo_addon_shopfloor-18.0.0.5.0.dist-info}/RECORD +19 -19
- {odoo_addon_shopfloor-18.0.0.3.1.dist-info → odoo_addon_shopfloor-18.0.0.5.0.dist-info}/WHEEL +0 -0
- {odoo_addon_shopfloor-18.0.0.3.1.dist-info → odoo_addon_shopfloor-18.0.0.5.0.dist-info}/top_level.txt +0 -0
odoo/addons/shopfloor/README.rst
CHANGED
@@ -11,7 +11,7 @@ Shopfloor
|
|
11
11
|
!! This file is generated by oca-gen-addon-readme !!
|
12
12
|
!! changes will be overwritten. !!
|
13
13
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
14
|
-
!! source digest: sha256:
|
14
|
+
!! source digest: sha256:82699fc8ed59ec349f18149761cdefd28a4d13c4b41274373aa4e1ff02cc593b
|
15
15
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
16
16
|
|
17
17
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
@@ -6,7 +6,7 @@
|
|
6
6
|
{
|
7
7
|
"name": "Shopfloor",
|
8
8
|
"summary": "manage warehouse operations with barcode scanners",
|
9
|
-
"version": "18.0.0.
|
9
|
+
"version": "18.0.0.5.0",
|
10
10
|
"development_status": "Beta",
|
11
11
|
"category": "Inventory",
|
12
12
|
"website": "https://github.com/OCA/stock-logistics-shopfloor",
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Copyright 2020 Camptocamp SA (http://www.camptocamp.com)
|
2
2
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
3
3
|
from odoo import _, fields
|
4
|
-
from odoo.tools.float_utils import float_round
|
4
|
+
from odoo.tools.float_utils import float_compare, float_round
|
5
5
|
|
6
6
|
from odoo.addons.component.core import Component
|
7
7
|
|
@@ -252,3 +252,16 @@ class StockAction(Component):
|
|
252
252
|
# when no putaway is found, the move line destination stays the
|
253
253
|
# default's of the picking type
|
254
254
|
return any(line.location_dest_id in base_locations for line in move_lines)
|
255
|
+
|
256
|
+
def move_line_increment_qty_picked(self, move_line, packaging=False):
|
257
|
+
qty = packaging and packaging.qty or 1
|
258
|
+
move_line.qty_picked += qty
|
259
|
+
|
260
|
+
def move_line_check_qty_picked(self, move_line):
|
261
|
+
rounding = move_line.product_id.uom_id.rounding
|
262
|
+
qty_picked = move_line.qty_picked
|
263
|
+
qty_todo = move_line.quantity
|
264
|
+
# If qty picked is >= qty todo, then there's nothing more to pick
|
265
|
+
if float_compare(qty_picked, qty_todo, precision_rounding=rounding) > 0:
|
266
|
+
return False
|
267
|
+
return True
|
@@ -379,7 +379,7 @@ class ClusterPicking(Component):
|
|
379
379
|
"""Get the last line picked and put in a pack for this picking"""
|
380
380
|
return fields.first(
|
381
381
|
picking.move_line_ids.filtered(
|
382
|
-
lambda x: x.
|
382
|
+
lambda x: x.picked
|
383
383
|
and x.result_package_id
|
384
384
|
# if we are moving the entire package, we shouldn't
|
385
385
|
# add stuff inside it, it's not a new package
|
@@ -737,7 +737,7 @@ class ClusterPicking(Component):
|
|
737
737
|
* zero_check: if the quantity of product moved is 0 in the
|
738
738
|
source location after the move (beware: at this point the product we put in
|
739
739
|
a bin is still considered to be in the source location, so we have to compute
|
740
|
-
the source location's quantity -
|
740
|
+
the source location's quantity - qty_picked).
|
741
741
|
* unload_all: when all lines have a destination package and they all
|
742
742
|
have the same destination.
|
743
743
|
* unload_single: when all lines have a destination package and they all
|
@@ -795,10 +795,10 @@ class ClusterPicking(Component):
|
|
795
795
|
},
|
796
796
|
qty_done=quantity,
|
797
797
|
)
|
798
|
-
move_line.write({"
|
798
|
+
move_line.write({"qty_picked": quantity, "result_package_id": bin_package.id})
|
799
799
|
# Only apply zero check if the product is of type "product".
|
800
800
|
zero_check = (
|
801
|
-
move_line.product_id.
|
801
|
+
move_line.product_id.is_storable
|
802
802
|
and move_line.picking_id.picking_type_id.shopfloor_zero_check
|
803
803
|
)
|
804
804
|
if zero_check and move_line.location_id.planned_qty_in_location_is_empty():
|
@@ -807,7 +807,7 @@ class ClusterPicking(Component):
|
|
807
807
|
return self._pick_next_line(
|
808
808
|
batch,
|
809
809
|
message=self.msg_store.x_units_put_in_package(
|
810
|
-
move_line.
|
810
|
+
move_line.qty_picked, move_line.product_id, move_line.result_package_id
|
811
811
|
),
|
812
812
|
# if we split the move line, we want to process the one generated by the
|
813
813
|
# split right now
|
@@ -866,7 +866,7 @@ class ClusterPicking(Component):
|
|
866
866
|
def _filter_for_unload(self, line):
|
867
867
|
return (
|
868
868
|
line.state in ("assigned", "partially_available")
|
869
|
-
and line.
|
869
|
+
and line.picked
|
870
870
|
and line.result_package_id
|
871
871
|
and not line.shopfloor_unloaded
|
872
872
|
)
|
@@ -917,7 +917,7 @@ class ClusterPicking(Component):
|
|
917
917
|
return self._pick_next_line(
|
918
918
|
batch,
|
919
919
|
message=self.msg_store.x_units_put_in_package(
|
920
|
-
move_line.
|
920
|
+
move_line.qty_picked, move_line.product_id, move_line.result_package_id
|
921
921
|
),
|
922
922
|
)
|
923
923
|
|
@@ -1014,6 +1014,13 @@ class ClusterPicking(Component):
|
|
1014
1014
|
inventory.create_stock_issue(move, location, package, lot)
|
1015
1015
|
|
1016
1016
|
# try to reassign the moves in case we have stock in another location
|
1017
|
+
for move in unreserve_moves:
|
1018
|
+
picked_lines = move.move_line_ids.filtered(lambda line: line.picked)
|
1019
|
+
# extract picked lin
|
1020
|
+
if picked_lines != move.move_line_ids:
|
1021
|
+
# Extract picked lines in another move, because _action_assign will
|
1022
|
+
# not do anything if the moved is picked.
|
1023
|
+
move.split_other_move_lines(picked_lines, intersection=True)
|
1017
1024
|
unreserve_moves._action_assign()
|
1018
1025
|
|
1019
1026
|
return self._pick_next_line(batch)
|
@@ -1036,7 +1043,7 @@ class ClusterPicking(Component):
|
|
1036
1043
|
("package_id", "=", package.id),
|
1037
1044
|
("lot_id", "=", lot.id),
|
1038
1045
|
("state", "not in", ("cancel", "done")),
|
1039
|
-
("
|
1046
|
+
("picked", "=", False),
|
1040
1047
|
("picking_id.batch_id", "=", batch.id),
|
1041
1048
|
]
|
1042
1049
|
return domain
|
@@ -372,7 +372,7 @@ ul.auto-toc {
|
|
372
372
|
!! This file is generated by oca-gen-addon-readme !!
|
373
373
|
!! changes will be overwritten. !!
|
374
374
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
375
|
-
!! source digest: sha256:
|
375
|
+
!! source digest: sha256:82699fc8ed59ec349f18149761cdefd28a4d13c4b41274373aa4e1ff02cc593b
|
376
376
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
377
377
|
<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/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/stock-logistics-shopfloor/tree/18.0/shopfloor"><img alt="OCA/stock-logistics-shopfloor" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--shopfloor-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-shopfloor-18-0/stock-logistics-shopfloor-18-0-shopfloor"><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/stock-logistics-shopfloor&target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
378
378
|
<p>Shopfloor is a barcode scanner application for internal warehouse
|
@@ -10,19 +10,19 @@ from . import test_actions_stock
|
|
10
10
|
|
11
11
|
# from . import test_single_pack_transfer
|
12
12
|
# from . import test_single_pack_transfer_putaway
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
13
|
+
from . import test_cluster_picking_base
|
14
|
+
from . import test_cluster_picking_batch
|
15
|
+
from . import test_cluster_picking_select
|
16
|
+
from . import test_cluster_picking_scan_line
|
17
|
+
from . import test_cluster_picking_scan_line_location_or_pack_first
|
18
|
+
from . import test_cluster_picking_scan_line_no_prefill_qty
|
19
|
+
from . import test_cluster_picking_scan_destination
|
20
|
+
from . import test_cluster_picking_scan_destination_no_prefill_qty
|
21
|
+
from . import test_cluster_picking_is_zero
|
22
|
+
from . import test_cluster_picking_skip
|
23
|
+
from . import test_cluster_picking_stock_issue
|
24
|
+
from . import test_cluster_picking_change_pack_lot
|
25
|
+
from . import test_cluster_picking_unload
|
26
26
|
from . import test_checkout_base
|
27
27
|
from . import test_checkout_scan
|
28
28
|
from . import test_checkout_select
|
@@ -57,7 +57,10 @@ class ClusterPickingIsZeroCase(ClusterPickingCommonCase):
|
|
57
57
|
data=self._line_data(self.next_line),
|
58
58
|
message={
|
59
59
|
"message_type": "success",
|
60
|
-
"body":
|
60
|
+
"body": (
|
61
|
+
f"{self.line.qty_picked} {self.line.product_id.display_name} "
|
62
|
+
f"put in {self.bin1.name}"
|
63
|
+
),
|
61
64
|
},
|
62
65
|
)
|
63
66
|
|
@@ -85,6 +88,6 @@ class ClusterPickingIsZeroCase(ClusterPickingCommonCase):
|
|
85
88
|
data=self._line_data(self.next_line),
|
86
89
|
message={
|
87
90
|
"message_type": "success",
|
88
|
-
"body": f"{self.line.
|
91
|
+
"body": f"{self.line.qty_picked} {self.line.product_id.display_name} put in {self.bin1.name}", # noqa
|
89
92
|
},
|
90
93
|
)
|
@@ -45,18 +45,18 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
45
45
|
"""
|
46
46
|
line = self.batch.picking_ids.move_line_ids[0]
|
47
47
|
next_line = self.batch.picking_ids.move_line_ids[1]
|
48
|
-
|
48
|
+
qty_picked = line.quantity
|
49
49
|
response = self.service.dispatch(
|
50
50
|
"scan_destination_pack",
|
51
51
|
params={
|
52
52
|
"picking_batch_id": self.batch.id,
|
53
53
|
"move_line_id": line.id,
|
54
54
|
"barcode": self.bin1.name,
|
55
|
-
"quantity":
|
55
|
+
"quantity": qty_picked,
|
56
56
|
},
|
57
57
|
)
|
58
58
|
self.assertRecordValues(
|
59
|
-
line, [{"
|
59
|
+
line, [{"qty_picked": qty_picked, "result_package_id": self.bin1.id}]
|
60
60
|
)
|
61
61
|
self.assert_response(
|
62
62
|
response,
|
@@ -64,7 +64,7 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
64
64
|
data=self._line_data(next_line),
|
65
65
|
message={
|
66
66
|
"message_type": "success",
|
67
|
-
"body": f"{line.
|
67
|
+
"body": f"{line.qty_picked} {line.product_id.display_name} put in {self.bin1.name}", # noqa
|
68
68
|
},
|
69
69
|
)
|
70
70
|
|
@@ -79,18 +79,18 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
79
79
|
)
|
80
80
|
# this is the only remaining line to pick
|
81
81
|
line = self.two_lines_picking.move_line_ids[1]
|
82
|
-
|
82
|
+
qty_picked = line.quantity
|
83
83
|
response = self.service.dispatch(
|
84
84
|
"scan_destination_pack",
|
85
85
|
params={
|
86
86
|
"picking_batch_id": self.batch.id,
|
87
87
|
"move_line_id": line.id,
|
88
88
|
"barcode": self.bin2.name,
|
89
|
-
"quantity":
|
89
|
+
"quantity": qty_picked,
|
90
90
|
},
|
91
91
|
)
|
92
92
|
self.assertRecordValues(
|
93
|
-
line, [{"
|
93
|
+
line, [{"qty_picked": qty_picked, "result_package_id": self.bin2.id}]
|
94
94
|
)
|
95
95
|
data = self._data_for_batch(self.batch, self.packing_location)
|
96
96
|
self.assert_response(
|
@@ -140,7 +140,7 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
140
140
|
"quantity": line.quantity,
|
141
141
|
},
|
142
142
|
)
|
143
|
-
self.assertRecordValues(line, [{"
|
143
|
+
self.assertRecordValues(line, [{"qty_picked": 0, "result_package_id": False}])
|
144
144
|
self.assert_response(
|
145
145
|
response,
|
146
146
|
next_state="scan_destination",
|
@@ -177,7 +177,7 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
177
177
|
line,
|
178
178
|
[
|
179
179
|
{
|
180
|
-
"
|
180
|
+
"qty_picked": 10,
|
181
181
|
"result_package_id": self.bin1.id,
|
182
182
|
"quantity": 10,
|
183
183
|
}
|
@@ -185,7 +185,7 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
185
185
|
)
|
186
186
|
self.assertRecordValues(
|
187
187
|
new_line,
|
188
|
-
[{"
|
188
|
+
[{"qty_picked": 0, "result_package_id": False, "quantity": 10}],
|
189
189
|
)
|
190
190
|
|
191
191
|
def test_scan_destination_pack_bin_not_found(self):
|
@@ -267,17 +267,17 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
267
267
|
data=self._line_data(new_line),
|
268
268
|
message={
|
269
269
|
"message_type": "success",
|
270
|
-
"body": f"{line.
|
270
|
+
"body": f"{line.qty_picked} {line.product_id.display_name} put in {self.bin1.name}", # noqa
|
271
271
|
},
|
272
272
|
)
|
273
273
|
|
274
274
|
self.assertRecordValues(
|
275
275
|
line,
|
276
|
-
[{"
|
276
|
+
[{"qty_picked": 7, "result_package_id": self.bin1.id, "quantity": 7}],
|
277
277
|
)
|
278
278
|
self.assertRecordValues(
|
279
279
|
new_line,
|
280
|
-
[{"
|
280
|
+
[{"qty_picked": 0, "result_package_id": False, "quantity": 3}],
|
281
281
|
)
|
282
282
|
# the reserved quantity on the quant must stay the same
|
283
283
|
self.assertRecordValues(quant, [{"quantity": 40.0, "reserved_quantity": 20.0}])
|
@@ -307,9 +307,9 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
307
307
|
# ensure we have activated the zero check
|
308
308
|
self.one_line_picking.picking_type_id.sudo().shopfloor_zero_check = True
|
309
309
|
# Update the quantity in the location to be equal to the line's
|
310
|
-
# so when scan_destination_pack sets the
|
310
|
+
# so when scan_destination_pack sets the qty_picked, the planned
|
311
311
|
# qty should be zero and trigger a zero check
|
312
|
-
self._update_qty_in_location(location, product, qty)
|
312
|
+
self._update_qty_in_location(location, product, qty / 2)
|
313
313
|
# Reserve goods (now the move line has the expected source location)
|
314
314
|
self.one_line_picking.move_ids.location_id = location
|
315
315
|
self.one_line_picking.action_assign()
|
@@ -340,7 +340,7 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
340
340
|
# ensure we have deactivated the zero check
|
341
341
|
self.one_line_picking.picking_type_id.sudo().shopfloor_zero_check = False
|
342
342
|
# Update the quantity in the location to be equal to the line's
|
343
|
-
# so when scan_destination_pack sets the
|
343
|
+
# so when scan_destination_pack sets the qty_picked, the planned
|
344
344
|
# qty should be zero and trigger a zero check
|
345
345
|
self._update_qty_in_location(line.location_id, line.product_id, line.quantity)
|
346
346
|
response = self.service.dispatch(
|
@@ -361,6 +361,6 @@ class ClusterPickingScanDestinationPackCase(ClusterPickingCommonCase):
|
|
361
361
|
data=self._line_data(next_line),
|
362
362
|
message={
|
363
363
|
"message_type": "success",
|
364
|
-
"body": f"{line.
|
364
|
+
"body": f"{line.qty_picked} {line.product_id.display_name} put in {self.bin1.name}", # noqa
|
365
365
|
},
|
366
366
|
)
|
@@ -42,21 +42,21 @@ class ClusterPickingScanDestinationPackPrefillQtyCase(ClusterPickingCommonCase):
|
|
42
42
|
def test_scan_destination_pack_increment_with_product(self):
|
43
43
|
"""Check quantity increment by scanning the product."""
|
44
44
|
line = self.batch.picking_ids.move_line_ids[0]
|
45
|
-
|
46
|
-
for
|
45
|
+
previous_qty_picked = line.qty_picked
|
46
|
+
for qty_picked in range(1, 2):
|
47
47
|
response = self.service.dispatch(
|
48
48
|
"scan_destination_pack",
|
49
49
|
params={
|
50
50
|
"picking_batch_id": self.batch.id,
|
51
51
|
"move_line_id": line.id,
|
52
52
|
"barcode": line.product_id.barcode,
|
53
|
-
"quantity":
|
53
|
+
"quantity": qty_picked,
|
54
54
|
},
|
55
55
|
)
|
56
56
|
# Ensure the qty has not changed.
|
57
|
-
self.assertEqual(line.
|
57
|
+
self.assertEqual(line.qty_picked, previous_qty_picked)
|
58
58
|
|
59
|
-
expected_qty_done =
|
59
|
+
expected_qty_done = qty_picked + 1
|
60
60
|
self.assert_response(
|
61
61
|
response,
|
62
62
|
next_state="scan_destination",
|
@@ -66,24 +66,24 @@ class ClusterPickingScanDestinationPackPrefillQtyCase(ClusterPickingCommonCase):
|
|
66
66
|
def test_scan_destination_pack_increment_with_wrong_product(self):
|
67
67
|
"""Check quantity is not incremented by scanning the wrong product."""
|
68
68
|
line = self.batch.picking_ids.move_line_ids[0]
|
69
|
-
|
70
|
-
|
69
|
+
previous_qty_picked = line.qty_picked
|
70
|
+
qty_picked = 2
|
71
71
|
response = self.service.dispatch(
|
72
72
|
"scan_destination_pack",
|
73
73
|
params={
|
74
74
|
"picking_batch_id": self.batch.id,
|
75
75
|
"move_line_id": line.id,
|
76
76
|
"barcode": self.product_b.barcode,
|
77
|
-
"quantity":
|
77
|
+
"quantity": qty_picked,
|
78
78
|
},
|
79
79
|
)
|
80
80
|
# Ensure the qty has not changed.
|
81
|
-
self.assertEqual(line.
|
81
|
+
self.assertEqual(line.qty_picked, previous_qty_picked)
|
82
82
|
new_move_line = self.env["stock.move.line"].search(
|
83
83
|
[("move_id", "=", line.move_id.id), ("id", ">", line.id)]
|
84
84
|
)
|
85
85
|
self.assertFalse(new_move_line)
|
86
|
-
expected_qty_done =
|
86
|
+
expected_qty_done = qty_picked
|
87
87
|
self.assert_response(
|
88
88
|
response,
|
89
89
|
next_state="scan_destination",
|
@@ -94,22 +94,22 @@ class ClusterPickingScanDestinationPackPrefillQtyCase(ClusterPickingCommonCase):
|
|
94
94
|
def test_scan_destination_pack_increment_with_packaging(self):
|
95
95
|
"""Check quantity incremented by scanning the packaging."""
|
96
96
|
line = self.batch.picking_ids.move_line_ids[0]
|
97
|
-
|
97
|
+
previous_qty_picked = line.qty_picked
|
98
98
|
packaging = self.product_a_packaging
|
99
|
-
|
99
|
+
qty_picked = 2
|
100
100
|
response = self.service.dispatch(
|
101
101
|
"scan_destination_pack",
|
102
102
|
params={
|
103
103
|
"picking_batch_id": self.batch.id,
|
104
104
|
"move_line_id": line.id,
|
105
105
|
"barcode": packaging.barcode,
|
106
|
-
"quantity":
|
106
|
+
"quantity": qty_picked,
|
107
107
|
},
|
108
108
|
)
|
109
109
|
# Ensure the qty has not changed in the record.
|
110
|
-
self.assertEqual(line.
|
110
|
+
self.assertEqual(line.qty_picked, previous_qty_picked)
|
111
111
|
|
112
|
-
expected_qty_done =
|
112
|
+
expected_qty_done = qty_picked + packaging.qty
|
113
113
|
self.assert_response(
|
114
114
|
response,
|
115
115
|
next_state="scan_destination",
|
@@ -16,7 +16,7 @@ class ClusterPickingScanLineCase(ClusterPickingLineCommonCase):
|
|
16
16
|
|
17
17
|
def _scan_line_ok(self, line, scanned, expected_qty_done=1):
|
18
18
|
batch = line.picking_id.batch_id
|
19
|
-
previous_qty_done = line.
|
19
|
+
previous_qty_done = line.qty_picked
|
20
20
|
response = self.service.dispatch(
|
21
21
|
"scan_line",
|
22
22
|
params={
|
@@ -28,7 +28,7 @@ class ClusterPickingScanLineCase(ClusterPickingLineCommonCase):
|
|
28
28
|
# For any barcode scanned, the quantity done is set in
|
29
29
|
# the response data to fully done but the record is not updated.
|
30
30
|
# We ensure the qty has not changed in the record.
|
31
|
-
self.assertEqual(line.
|
31
|
+
self.assertEqual(line.qty_picked, previous_qty_done)
|
32
32
|
|
33
33
|
self.assert_response(
|
34
34
|
response,
|
@@ -195,7 +195,7 @@ class ClusterPickingStockIssue(ClusterPickingCommonCase):
|
|
195
195
|
[
|
196
196
|
{
|
197
197
|
"location_id": self.shelf1.id,
|
198
|
-
"
|
198
|
+
"qty_picked": 5.0,
|
199
199
|
"result_package_id": self.dest_package.id,
|
200
200
|
}
|
201
201
|
],
|
@@ -349,7 +349,8 @@ class ClusterPickingStockIssue(ClusterPickingCommonCase):
|
|
349
349
|
[
|
350
350
|
{
|
351
351
|
"location_id": self.shelf1.id,
|
352
|
-
"
|
352
|
+
"qty_picked": 1.0,
|
353
|
+
"picked": True,
|
353
354
|
"result_package_id": self.dest_package.id,
|
354
355
|
}
|
355
356
|
],
|
@@ -155,19 +155,25 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
155
155
|
[
|
156
156
|
{
|
157
157
|
"shopfloor_unloaded": True,
|
158
|
-
"
|
158
|
+
"qty_picked": 10,
|
159
|
+
"quantity": 10,
|
160
|
+
"picked": True,
|
159
161
|
"state": "done",
|
160
162
|
"location_dest_id": self.packing_location.id,
|
161
163
|
},
|
162
164
|
{
|
163
165
|
"shopfloor_unloaded": True,
|
164
|
-
"
|
166
|
+
"qty_picked": 10,
|
167
|
+
"quantity": 10,
|
168
|
+
"picked": True,
|
165
169
|
"state": "done",
|
166
170
|
"location_dest_id": self.packing_location.id,
|
167
171
|
},
|
168
172
|
{
|
169
173
|
"shopfloor_unloaded": True,
|
170
|
-
"
|
174
|
+
"qty_picked": 10,
|
175
|
+
"quantity": 10,
|
176
|
+
"picked": True,
|
171
177
|
"state": "done",
|
172
178
|
"location_dest_id": self.packing_location.id,
|
173
179
|
},
|
@@ -178,6 +184,7 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
178
184
|
response,
|
179
185
|
next_state="start",
|
180
186
|
message={"message_type": "success", "body": "Batch Transfer complete"},
|
187
|
+
popup=self.ANY,
|
181
188
|
)
|
182
189
|
|
183
190
|
def test_set_destination_all_remaining_lines(self):
|
@@ -209,14 +216,18 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
209
216
|
[
|
210
217
|
{
|
211
218
|
"shopfloor_unloaded": True,
|
212
|
-
"
|
219
|
+
"qty_picked": 10,
|
220
|
+
"quantity": 10,
|
221
|
+
"picked": True,
|
213
222
|
"state": "done",
|
214
223
|
"picking_id": self.one_line_picking.id,
|
215
224
|
"location_dest_id": self.packing_location.id,
|
216
225
|
},
|
217
226
|
{
|
218
227
|
"shopfloor_unloaded": True,
|
219
|
-
"
|
228
|
+
"qty_picked": 10,
|
229
|
+
"quantity": 10,
|
230
|
+
"picked": True,
|
220
231
|
# will be done when the second line of the picking is unloaded
|
221
232
|
"state": "assigned",
|
222
233
|
"picking_id": self.two_lines_picking.id,
|
@@ -224,7 +235,9 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
224
235
|
},
|
225
236
|
{
|
226
237
|
"shopfloor_unloaded": False,
|
227
|
-
"
|
238
|
+
"qty_picked": 0,
|
239
|
+
"quantity": 10,
|
240
|
+
"picked": False,
|
228
241
|
"state": "assigned",
|
229
242
|
"picking_id": self.two_lines_picking.id,
|
230
243
|
"location_dest_id": self.packing_location.id,
|
@@ -239,6 +252,7 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
239
252
|
next_state="start_line",
|
240
253
|
data=self._line_data(self.move_lines[2]),
|
241
254
|
message={"body": "Batch Transfer line done", "message_type": "success"},
|
255
|
+
popup=self.ANY,
|
242
256
|
)
|
243
257
|
|
244
258
|
def test_set_destination_all_picking_unassigned(self):
|
@@ -278,6 +292,7 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
278
292
|
response,
|
279
293
|
next_state="start",
|
280
294
|
message=self.service.msg_store.batch_transfer_complete(),
|
295
|
+
popup=self.ANY,
|
281
296
|
)
|
282
297
|
|
283
298
|
def test_set_destination_all_but_different_dest(self):
|
@@ -358,8 +373,8 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
358
373
|
"""
|
359
374
|
move_lines = self.move_lines
|
360
375
|
self._set_dest_package_and_done(move_lines, self.bin1)
|
361
|
-
|
362
|
-
move_lines
|
376
|
+
# writing dest loc on all moves to avoid entering _are_all_dest_location_same
|
377
|
+
move_lines.picking_id.location_dest_id = self.packing_a_location
|
363
378
|
|
364
379
|
response = self.service.dispatch(
|
365
380
|
"set_destination_all",
|
@@ -427,6 +442,7 @@ class ClusterPickingSetDestinationAllCase(ClusterPickingUnloadingCommonCase):
|
|
427
442
|
response,
|
428
443
|
next_state="start",
|
429
444
|
message={"message_type": "success", "body": "Batch Transfer complete"},
|
445
|
+
popup=self.ANY,
|
430
446
|
)
|
431
447
|
|
432
448
|
def test_set_destination_all_check_confirmation(self):
|
@@ -589,7 +605,9 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
589
605
|
[
|
590
606
|
{
|
591
607
|
"shopfloor_unloaded": True,
|
592
|
-
"
|
608
|
+
"qty_picked": 10,
|
609
|
+
"quantity": 10,
|
610
|
+
"picked": True,
|
593
611
|
"state": "done",
|
594
612
|
"picking_id": self.one_line_picking.id,
|
595
613
|
"location_dest_id": self.packing_a_location.id,
|
@@ -601,14 +619,18 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
601
619
|
[
|
602
620
|
{
|
603
621
|
"shopfloor_unloaded": False,
|
604
|
-
"
|
622
|
+
"qty_picked": 10,
|
623
|
+
"quantity": 10,
|
624
|
+
"picked": True,
|
605
625
|
"state": "assigned",
|
606
626
|
"picking_id": self.two_lines_picking.id,
|
607
627
|
"location_dest_id": self.packing_b_location.id,
|
608
628
|
},
|
609
629
|
{
|
610
630
|
"shopfloor_unloaded": False,
|
611
|
-
"
|
631
|
+
"qty_picked": 10,
|
632
|
+
"quantity": 10,
|
633
|
+
"picked": True,
|
612
634
|
"state": "assigned",
|
613
635
|
"picking_id": self.two_lines_picking.id,
|
614
636
|
"location_dest_id": self.packing_b_location.id,
|
@@ -619,10 +641,15 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
619
641
|
|
620
642
|
location = self.bin2_lines[0].location_dest_id
|
621
643
|
data = self._data_for_batch(self.batch, location, pack=self.bin2)
|
644
|
+
# Odoo might create new destination moves which will yield a popup message.
|
645
|
+
# We are not testing anything else than the next state here, which should
|
646
|
+
# be unload_single, as the only thing that matters here is that we were
|
647
|
+
# able to process the picking.
|
622
648
|
self.assert_response(
|
623
649
|
response,
|
624
650
|
next_state="unload_single",
|
625
651
|
data=data,
|
652
|
+
popup=self.ANY,
|
626
653
|
)
|
627
654
|
|
628
655
|
def test_scan_destination_unload_package_enabled(self):
|
@@ -705,7 +732,9 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
705
732
|
[
|
706
733
|
{
|
707
734
|
"shopfloor_unloaded": True,
|
708
|
-
"
|
735
|
+
"qty_picked": 10,
|
736
|
+
"quantity": 10,
|
737
|
+
"picked": True,
|
709
738
|
"state": "assigned",
|
710
739
|
"picking_id": self.two_lines_picking.id,
|
711
740
|
"location_dest_id": self.packing_b_location.id,
|
@@ -717,7 +746,9 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
717
746
|
[
|
718
747
|
{
|
719
748
|
"shopfloor_unloaded": False,
|
720
|
-
"
|
749
|
+
"qty_picked": 10,
|
750
|
+
"quantity": 10,
|
751
|
+
"picked": True,
|
721
752
|
"state": "assigned",
|
722
753
|
"picking_id": self.two_lines_picking.id,
|
723
754
|
"location_dest_id": self.packing_b_location.id,
|
@@ -765,7 +796,9 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
765
796
|
[
|
766
797
|
{
|
767
798
|
"shopfloor_unloaded": True,
|
768
|
-
"
|
799
|
+
"qty_picked": 10,
|
800
|
+
"quantity": 10,
|
801
|
+
"picked": True,
|
769
802
|
"state": "done",
|
770
803
|
"picking_id": self.two_lines_picking.id,
|
771
804
|
"location_dest_id": self.packing_b_location.id,
|
@@ -774,10 +807,15 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
774
807
|
)
|
775
808
|
self.assertRecordValues(self.batch, [{"state": "done"}])
|
776
809
|
|
810
|
+
# Odoo might create new destination moves which will yield a popup message.
|
811
|
+
# We are not testing anything else than the next state here, which should
|
812
|
+
# be unload_single, as the only thing that matters here is that we were
|
813
|
+
# able to process the picking.
|
777
814
|
self.assert_response(
|
778
815
|
response,
|
779
816
|
next_state="start",
|
780
817
|
message={"body": "Batch Transfer complete", "message_type": "success"},
|
818
|
+
popup=self.ANY,
|
781
819
|
)
|
782
820
|
|
783
821
|
def test_unload_scan_destination_error_location_not_found(self):
|
@@ -895,7 +933,13 @@ class ClusterPickingUnloadScanDestinationCase(ClusterPickingUnloadingCommonCase)
|
|
895
933
|
{"location_dest_id": self.packing_a_location.id},
|
896
934
|
],
|
897
935
|
)
|
898
|
-
|
936
|
+
# Odoo might create new destination moves which will yield a popup message.
|
937
|
+
# We are not testing anything else than the next state here, which should
|
938
|
+
# be unload_single, as the only thing that matters here is that we were
|
939
|
+
# able to process the picking.
|
940
|
+
self.assert_response(
|
941
|
+
response, next_state="unload_single", data=self.ANY, popup=self.ANY
|
942
|
+
)
|
899
943
|
|
900
944
|
def test_unload_scan_destination_completion_info(self):
|
901
945
|
"""/unload_scan_destination that make chained picking ready"""
|
@@ -192,8 +192,10 @@ class TestStockSplit(TransactionCase):
|
|
192
192
|
)
|
193
193
|
# this method adds the quantity to the current quantity, so remove it
|
194
194
|
quantity -= sum(quants.mapped("quantity"))
|
195
|
+
if not quantity:
|
196
|
+
return
|
195
197
|
cls.env["stock.quant"]._update_available_quantity(
|
196
|
-
product, location, quantity, package_id=package, lot_id=lot
|
198
|
+
product, location, quantity=quantity, package_id=package, lot_id=lot
|
197
199
|
)
|
198
200
|
|
199
201
|
def test_split_pickings_from_source_location(self):
|
{odoo_addon_shopfloor-18.0.0.3.1.dist-info → odoo_addon_shopfloor-18.0.0.5.0.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: odoo-addon-shopfloor
|
3
|
-
Version: 18.0.0.
|
3
|
+
Version: 18.0.0.5.0
|
4
4
|
Requires-Python: >=3.10
|
5
5
|
Requires-Dist: odoo-addon-base_rest==18.0.*
|
6
6
|
Requires-Dist: odoo-addon-jsonifier==18.0.*
|
@@ -42,7 +42,7 @@ Shopfloor
|
|
42
42
|
!! This file is generated by oca-gen-addon-readme !!
|
43
43
|
!! changes will be overwritten. !!
|
44
44
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
45
|
-
!! source digest: sha256:
|
45
|
+
!! source digest: sha256:82699fc8ed59ec349f18149761cdefd28a4d13c4b41274373aa4e1ff02cc593b
|
46
46
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
47
47
|
|
48
48
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
{odoo_addon_shopfloor-18.0.0.3.1.dist-info → odoo_addon_shopfloor-18.0.0.5.0.dist-info}/RECORD
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
odoo/addons/shopfloor/README.rst,sha256
|
1
|
+
odoo/addons/shopfloor/README.rst,sha256=bWxl7EQ4nkZ2hXJJWTOwcvr7BSSbMzTj7VsfucYWi6I,6138
|
2
2
|
odoo/addons/shopfloor/__init__.py,sha256=ke3RmZ7XkX-lz4S8NHAxNIEJ5_Nvj5bjBAqD-W-q73c,91
|
3
|
-
odoo/addons/shopfloor/__manifest__.py,sha256=
|
3
|
+
odoo/addons/shopfloor/__manifest__.py,sha256=ZOAsrUj9vnrx8654PRYNGoku-2pBFJ9QB__MvaAzrkA,2572
|
4
4
|
odoo/addons/shopfloor/exceptions.py,sha256=81KpIGVkuYRhA0cIuml4pg4G3izqkAAhLqoXZbUd4X8,197
|
5
5
|
odoo/addons/shopfloor/utils.py,sha256=Be7J8Tu7ivOW4lpe8IjKxwqfTwfmK-ZkeFEavoYIIF4,375
|
6
6
|
odoo/addons/shopfloor/actions/__init__.py,sha256=_yTf-NtaJmSylBJIoJJvKNYEI-wlqpyRw-S5eJRRzEM,400
|
@@ -17,7 +17,7 @@ odoo/addons/shopfloor/actions/savepoint.py,sha256=bIpPUPg-2BbO8hz277kWnq4DP_cayh
|
|
17
17
|
odoo/addons/shopfloor/actions/schema.py,sha256=H_4HCaYB7HiqU35WO2NmHtOLJ087iFLbiJD4HdiHFjU,8555
|
18
18
|
odoo/addons/shopfloor/actions/schema_detail.py,sha256=_xtm8ptRXAPBIMTyr8XKMQtogcjBudh-QRqKUZEEHGU,4968
|
19
19
|
odoo/addons/shopfloor/actions/search.py,sha256=9mcpeYo1iFQPdt_F2wLkqK5nRpR_gkFaOTReaM2Q7r4,7014
|
20
|
-
odoo/addons/shopfloor/actions/stock.py,sha256=
|
20
|
+
odoo/addons/shopfloor/actions/stock.py,sha256=KjE7jyUQ0OoLdusiF4PPTfstUWX5xfaeCwoioyaHr4k,11755
|
21
21
|
odoo/addons/shopfloor/actions/stock_unreserve.py,sha256=P0a9V53MqG4sDln8yX0Id-nEXz7cydiFY_BBznioQpg,3090
|
22
22
|
odoo/addons/shopfloor/components/__init__.py,sha256=a3ox1WOD1JhrQUrYMRn-yDJI0Vvc7ciKdmXuZB29ToU,173
|
23
23
|
odoo/addons/shopfloor/components/scan_handler_location.py,sha256=LImiaG4L4xBKUFWZLSnJV-eSCvj_NCDCM5GqZSnsPmE,825
|
@@ -71,7 +71,7 @@ odoo/addons/shopfloor/readme/USAGE.md,sha256=YHN8xXpASu7XGNvmpV453zK86e5UyWeHPm-
|
|
71
71
|
odoo/addons/shopfloor/security/groups.xml,sha256=hdLqRUZM_4RQnleinRYhxDxqW4VOI5li4oTsB7m96LQ,578
|
72
72
|
odoo/addons/shopfloor/services/__init__.py,sha256=4lhF0VNx8QosVEZj9QJYgv6oWD0kl9FX80rL5WMrXf4,303
|
73
73
|
odoo/addons/shopfloor/services/checkout.py,sha256=E40wOnnuKhpc98Q27ePz0nAvd9xB3-o6GSz8C7Hj6oc,82616
|
74
|
-
odoo/addons/shopfloor/services/cluster_picking.py,sha256=
|
74
|
+
odoo/addons/shopfloor/services/cluster_picking.py,sha256=mHnJnqTeeJkiD7pCKOb45E2Zd4mSEAYK2KcO2qgW8WA,69142
|
75
75
|
odoo/addons/shopfloor/services/delivery.py,sha256=Gxbwp0x9XPLx9AJ3GFDSH69xHrQCD_R8m2i78kuuS6s,34352
|
76
76
|
odoo/addons/shopfloor/services/location_content_transfer.py,sha256=ovx3w4xnACTlc-24JmUcGtcKgaTb1FXpZ31m2FhTGM4,50431
|
77
77
|
odoo/addons/shopfloor/services/menu.py,sha256=m1eNOReTda_xD-p-m8k2Pn5cJQOLWTiaBGW46zxsYsk,2354
|
@@ -82,8 +82,8 @@ odoo/addons/shopfloor/services/zone_picking.py,sha256=BI25T234hcjlgGDIMjsO6PfDUK
|
|
82
82
|
odoo/addons/shopfloor/services/forms/__init__.py,sha256=nxwJdKX47hb56ERf4Qb3UE5dkdsHCbkaXMAXs4XMAd8,27
|
83
83
|
odoo/addons/shopfloor/services/forms/picking_form.py,sha256=pX1hbALlCqTVG3m1HYY5xtgbTcSHVnpaGaqm3akBS-U,2718
|
84
84
|
odoo/addons/shopfloor/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
|
85
|
-
odoo/addons/shopfloor/static/description/index.html,sha256=
|
86
|
-
odoo/addons/shopfloor/tests/__init__.py,sha256=
|
85
|
+
odoo/addons/shopfloor/static/description/index.html,sha256=HoTSlz9robP64j8fSLEEAOSJ0mq8WwUwi2j7tACozmg,18540
|
86
|
+
odoo/addons/shopfloor/tests/__init__.py,sha256=1L6fBScnX0sYhGhRfdrJAgc0BVT2bzO_43WJ8aiIhIU,3986
|
87
87
|
odoo/addons/shopfloor/tests/common.py,sha256=lFdSQRXBjwCr7StVJltEwLtA_a4V77JcBcKkGAnAL5M,11676
|
88
88
|
odoo/addons/shopfloor/tests/models.py,sha256=PWNPC6DgFMbrarojSxUqwycnBdePX-4Q5Z0rn1WwQqY,940
|
89
89
|
odoo/addons/shopfloor/tests/test_actions_change_package_lot.py,sha256=bUn-FXPWY-eo4kaS0S7jU4ge_xl1A9jfU_rNZQT8ZPs,47528
|
@@ -115,19 +115,19 @@ odoo/addons/shopfloor/tests/test_checkout_select_line.py,sha256=LlyFiY5CL5i_kqXc
|
|
115
115
|
odoo/addons/shopfloor/tests/test_checkout_select_package_base.py,sha256=Bm7J9lkq0NjXDB5o8wciK_tMW829EVRa-nQ_1wxB9og,2559
|
116
116
|
odoo/addons/shopfloor/tests/test_checkout_set_qty.py,sha256=PFWh3_T3ccqS7q-ISuI6PKD1WjCGG3vrIv-kfGCUcRA,9491
|
117
117
|
odoo/addons/shopfloor/tests/test_checkout_summary.py,sha256=n34MsVtM99B2rWHGyLDT-r2itWIhDXHbOKs47j2mDHE,2338
|
118
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_base.py,sha256=
|
118
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_base.py,sha256=U4Iv5AKQ05D4BgDXlwtAnfVAICqSdvYfjqduYzppPXE,2996
|
119
119
|
odoo/addons/shopfloor/tests/test_cluster_picking_batch.py,sha256=my3zHY8L-zuIkGl9riexR5zWmL6cr00g1dWr5nEb4Uk,4074
|
120
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_change_pack_lot.py,sha256=
|
121
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_is_zero.py,sha256=
|
122
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination.py,sha256=
|
123
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination_no_prefill_qty.py,sha256=
|
124
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_scan_line.py,sha256=
|
120
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_change_pack_lot.py,sha256=wQUwiRBjSSVOPVLqAYD3Rlz5Esx5nns5hzSgaTSzhjM,4167
|
121
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_is_zero.py,sha256=1PbboD9FHq6X7ONY-4ZeWHVvUhbJU_SeV-CLHvH8zbY,3382
|
122
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination.py,sha256=ID1FZSBtJeq_9c_gAlYFfOrxDdIN3grV1MOaU80mMnI,14083
|
123
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination_no_prefill_qty.py,sha256=W2aSmQjyeJCzsETp-CvcU9Olbp7BJGaL9-m8aN8G9fU,4506
|
124
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_scan_line.py,sha256=mHqqL9bvyOnWNRdvOrUpDSdBDyUnVKiIgMovMvNgphY,15658
|
125
125
|
odoo/addons/shopfloor/tests/test_cluster_picking_scan_line_location_or_pack_first.py,sha256=cYzOtirVzMJUgO8oElrrRikq8ML1HXuHidBmEdVeL7M,4434
|
126
126
|
odoo/addons/shopfloor/tests/test_cluster_picking_scan_line_no_prefill_qty.py,sha256=T-8V-Xug-T0cPe0XK09AlvL0S319QJk_-IPGP6v9es4,2897
|
127
127
|
odoo/addons/shopfloor/tests/test_cluster_picking_select.py,sha256=BvuQznmCtOAipvgEhiUiTyeKR6nDkC5u9hCUZIF7MEc,15240
|
128
128
|
odoo/addons/shopfloor/tests/test_cluster_picking_skip.py,sha256=CGTvP200X4XPX1sKIapTTJTw9Rs6aYh97c4k11IKBI8,3584
|
129
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_stock_issue.py,sha256=
|
130
|
-
odoo/addons/shopfloor/tests/test_cluster_picking_unload.py,sha256=
|
129
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_stock_issue.py,sha256=lcPC-w5PlkoknO7BVEl_aJitrtcn1_7YHCXIx7dnxJw,15830
|
130
|
+
odoo/addons/shopfloor/tests/test_cluster_picking_unload.py,sha256=3GqAj4jyCLaXEscCoNgS-wTSpbgO_1OoBp5a2vNZyxw,38989
|
131
131
|
odoo/addons/shopfloor/tests/test_delivery_base.py,sha256=XlreffzVgz4aVlG2Vo5Q02ZB5cMV9kI5F1UUMGC9xQA,5005
|
132
132
|
odoo/addons/shopfloor/tests/test_delivery_done.py,sha256=kKNvdxpIBmSMkDngENDBgpcQ-dA2x3863N42Si2N5Nw,4149
|
133
133
|
odoo/addons/shopfloor/tests/test_delivery_list_stock_picking.py,sha256=g-oaXqQofQ8txnOmjt1WCogROhALNARHiZAgMTqXHt0,1922
|
@@ -158,7 +158,7 @@ odoo/addons/shopfloor/tests/test_scan_anything.py,sha256=3kgnAS60fmTYEsy6pK8pluK
|
|
158
158
|
odoo/addons/shopfloor/tests/test_single_pack_transfer.py,sha256=GAzjurV-4e4xsWymo2LepjJq-aQI9lPNsoJBub9qVro,40934
|
159
159
|
odoo/addons/shopfloor/tests/test_single_pack_transfer_base.py,sha256=kU_UyP0G3u3j9HmzMoNawd79w-hbN7zNxMiQ1CKSUyg,1255
|
160
160
|
odoo/addons/shopfloor/tests/test_single_pack_transfer_putaway.py,sha256=ZcnzbrHpVFUeJJB2BywfkXpg8e7nyzvLP9v2Aqm2YPY,4415
|
161
|
-
odoo/addons/shopfloor/tests/test_stock_split.py,sha256=
|
161
|
+
odoo/addons/shopfloor/tests/test_stock_split.py,sha256=VW0f3iuvp8sFJJGv2FTXPYepiAsUS1MajaWh1pQYGSg,11261
|
162
162
|
odoo/addons/shopfloor/tests/test_user.py,sha256=tpjFFS1lJ4VwT8fwfz2GseXJy-JhAWC6TjNizFT_uSg,1423
|
163
163
|
odoo/addons/shopfloor/tests/test_zone_picking_base.py,sha256=I4mw2TP74mwU1lTxKulbP-Wm6i0xyOndrFSNWlkyqEI,20121
|
164
164
|
odoo/addons/shopfloor/tests/test_zone_picking_change_pack_lot.py,sha256=9Bg29Zp-vfgnF-P4U1xgXhHWhOWxfQkzzublZU2Ee-A,5414
|
@@ -183,7 +183,7 @@ odoo/addons/shopfloor/views/shopfloor_menu.xml,sha256=LK_XdKawKqXPTaE1tq4r5dXR62
|
|
183
183
|
odoo/addons/shopfloor/views/stock_location.xml,sha256=d7iqbOQZbb5YPSdAXlQ6spcj8dUvQ37DpEGuaLX5B1M,829
|
184
184
|
odoo/addons/shopfloor/views/stock_move_line.xml,sha256=AmIO95-G0AD5i5C3x_BQL_NARXvyCfe4mg9iM97wD1U,1996
|
185
185
|
odoo/addons/shopfloor/views/stock_picking_type.xml,sha256=M3U8xijiL6ZJUx2IiYelIYECsCRtOCU1J6lwlWzx3Jo,778
|
186
|
-
odoo_addon_shopfloor-18.0.0.
|
187
|
-
odoo_addon_shopfloor-18.0.0.
|
188
|
-
odoo_addon_shopfloor-18.0.0.
|
189
|
-
odoo_addon_shopfloor-18.0.0.
|
186
|
+
odoo_addon_shopfloor-18.0.0.5.0.dist-info/METADATA,sha256=SN5p3DSulKpV2ckquBp006l1wwKvsLtYpbg1Gy-inOY,7580
|
187
|
+
odoo_addon_shopfloor-18.0.0.5.0.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
|
188
|
+
odoo_addon_shopfloor-18.0.0.5.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
|
189
|
+
odoo_addon_shopfloor-18.0.0.5.0.dist-info/RECORD,,
|
{odoo_addon_shopfloor-18.0.0.3.1.dist-info → odoo_addon_shopfloor-18.0.0.5.0.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|