odoo-addon-shopfloor 18.0.0.2.0__py3-none-any.whl → 18.0.0.3.1__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/search.py +2 -0
- odoo/addons/shopfloor/models/stock_move_line.py +1 -1
- odoo/addons/shopfloor/services/zone_picking.py +14 -13
- odoo/addons/shopfloor/static/description/index.html +1 -1
- odoo/addons/shopfloor/tests/__init__.py +18 -18
- odoo/addons/shopfloor/tests/test_zone_picking_select_line.py +6 -3
- odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py +7 -6
- odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_pick_pack.py +4 -3
- odoo/addons/shopfloor/tests/test_zone_picking_unload_all.py +2 -2
- odoo/addons/shopfloor/tests/test_zone_picking_unload_single.py +1 -1
- {odoo_addon_shopfloor-18.0.0.2.0.dist-info → odoo_addon_shopfloor-18.0.0.3.1.dist-info}/METADATA +2 -2
- {odoo_addon_shopfloor-18.0.0.2.0.dist-info → odoo_addon_shopfloor-18.0.0.3.1.dist-info}/RECORD +16 -17
- odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py.bak +0 -202
- {odoo_addon_shopfloor-18.0.0.2.0.dist-info → odoo_addon_shopfloor-18.0.0.3.1.dist-info}/WHEEL +0 -0
- {odoo_addon_shopfloor-18.0.0.2.0.dist-info → odoo_addon_shopfloor-18.0.0.3.1.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:ba88a2ff0fc8dc7ea2a811a9507ddb4144cef230f98b4cbb1a6b506edefe389f
|
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.3.1",
|
10
10
|
"development_status": "Beta",
|
11
11
|
"category": "Inventory",
|
12
12
|
"website": "https://github.com/OCA/stock-logistics-shopfloor",
|
@@ -54,7 +54,7 @@ class StockMoveLine(models.Model):
|
|
54
54
|
# if we didn't bypass reservation update, the quant reservation
|
55
55
|
# would be reduced as much as the deduced quantity, which is wrong
|
56
56
|
# as we only moved the quantity to a new move line
|
57
|
-
self.
|
57
|
+
self.quantity = self.qty_picked
|
58
58
|
return new_line
|
59
59
|
return self.browse()
|
60
60
|
|
@@ -63,7 +63,7 @@ class ZonePicking(Component):
|
|
63
63
|
* they scan a location, in which case the move line's destination is
|
64
64
|
updated with it and the move is done
|
65
65
|
* they scan a package, which becomes the destination package of the move
|
66
|
-
line, the move line is not set to done, its ``
|
66
|
+
line, the move line is not set to done, its ``qty_picked`` is updated
|
67
67
|
and a field ``shopfloor_user_id`` is set to the user; consider the
|
68
68
|
move line is set in a buffer
|
69
69
|
|
@@ -451,7 +451,7 @@ class ZonePicking(Component):
|
|
451
451
|
def _find_buffer_move_lines_domain(self, dest_package=None):
|
452
452
|
domain = [
|
453
453
|
("picking_id.picking_type_id", "in", self.picking_types.ids),
|
454
|
-
("
|
454
|
+
("picked", "=", True),
|
455
455
|
("state", "not in", ("cancel", "done")),
|
456
456
|
("result_package_id", "!=", False),
|
457
457
|
("shopfloor_user_id", "=", self.env.user.id),
|
@@ -686,6 +686,9 @@ class ZonePicking(Component):
|
|
686
686
|
response_error_func=self._response_for_change_pack_lot,
|
687
687
|
)
|
688
688
|
else:
|
689
|
+
# FIXME: this case shouldn't be possible anymore
|
690
|
+
# because a check on stock.quant.package.write in odoo core
|
691
|
+
# prevents to update a location on a package w/o move lines.
|
689
692
|
response = self._list_move_lines(sublocation or self.zone_location)
|
690
693
|
message = self.msg_store.package_has_no_product_to_take(barcode)
|
691
694
|
return response, message
|
@@ -953,7 +956,7 @@ class ZonePicking(Component):
|
|
953
956
|
for _move_line in package.move_line_ids:
|
954
957
|
if _move_line.state not in ("assigned", "partially_available"):
|
955
958
|
continue
|
956
|
-
_move_line.
|
959
|
+
_move_line.qty_picked = move_line.quantity
|
957
960
|
move_lines |= _move_line
|
958
961
|
self._write_destination_on_lines(move_lines, location)
|
959
962
|
|
@@ -976,8 +979,7 @@ class ZonePicking(Component):
|
|
976
979
|
# Zero check
|
977
980
|
# Only apply zero check if the product is of type "product".
|
978
981
|
zero_check = (
|
979
|
-
move_line.product_id.
|
980
|
-
and self.picking_type.shopfloor_zero_check
|
982
|
+
move_line.product_id.is_storable and self.picking_type.shopfloor_zero_check
|
981
983
|
)
|
982
984
|
if zero_check and move_line.location_id.planned_qty_in_location_is_empty():
|
983
985
|
response = self._response_for_zero_check(move_line)
|
@@ -1059,8 +1061,7 @@ class ZonePicking(Component):
|
|
1059
1061
|
# Zero check
|
1060
1062
|
# Only apply zero check if the product is of type "product".
|
1061
1063
|
zero_check = (
|
1062
|
-
move_line.product_id.
|
1063
|
-
and self.picking_type.shopfloor_zero_check
|
1064
|
+
move_line.product_id.is_storable and self.picking_type.shopfloor_zero_check
|
1064
1065
|
)
|
1065
1066
|
if zero_check and move_line.location_id.planned_qty_in_location_is_empty():
|
1066
1067
|
response = self._response_for_zero_check(move_line)
|
@@ -1150,7 +1151,7 @@ class ZonePicking(Component):
|
|
1150
1151
|
moved is 0 in the source location after the move (beware: at this
|
1151
1152
|
point the product we put in the buffer is still considered to be in
|
1152
1153
|
the source location, so we have to compute the source location's
|
1153
|
-
quantity -
|
1154
|
+
quantity - picked qty).
|
1154
1155
|
* set_line_destination: the scanned location is invalid, user has to
|
1155
1156
|
scan another one
|
1156
1157
|
* set_line_destination+confirmation_required: the scanned location is not
|
@@ -1350,7 +1351,7 @@ class ZonePicking(Component):
|
|
1350
1351
|
("package_id", "=", package.id),
|
1351
1352
|
("lot_id", "=", lot.id),
|
1352
1353
|
("state", "not in", ("cancel", "done")),
|
1353
|
-
("
|
1354
|
+
("picked", "=", False),
|
1354
1355
|
]
|
1355
1356
|
return domain
|
1356
1357
|
|
@@ -1361,11 +1362,11 @@ class ZonePicking(Component):
|
|
1361
1362
|
because there is physically not enough goods. The move line is deleted
|
1362
1363
|
(unreserve), and an inventory is created to reduce the quantity in the
|
1363
1364
|
source location to prevent future errors until a correction. Beware:
|
1364
|
-
the quantity already reserved and having a
|
1365
|
+
the quantity already reserved and having a picked qty on other lines
|
1365
1366
|
in the same location should remain reserved so the inventory's quantity
|
1366
|
-
must be set to the total of
|
1367
|
+
must be set to the total of picked qty of other lines.
|
1367
1368
|
|
1368
|
-
The other lines not yet picked
|
1369
|
+
The other lines not yet picked in the same location for
|
1369
1370
|
the same product, lot, package are unreserved as well (moves lines
|
1370
1371
|
deleted, which unreserve their quantity on the move).
|
1371
1372
|
|
@@ -1481,7 +1482,7 @@ class ZonePicking(Component):
|
|
1481
1482
|
|
1482
1483
|
* in the current zone location and picking type
|
1483
1484
|
* not done or canceled
|
1484
|
-
*
|
1485
|
+
* picked
|
1485
1486
|
* have a destination package
|
1486
1487
|
* with ``shopfloor_user_id`` equal to the current user
|
1487
1488
|
|
@@ -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:ba88a2ff0fc8dc7ea2a811a9507ddb4144cef230f98b4cbb1a6b506edefe389f
|
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
|
@@ -64,24 +64,24 @@ from . import test_delivery_select
|
|
64
64
|
# from . import test_location_content_transfer_set_destination_package_or_line
|
65
65
|
# from . import test_location_content_transfer_putaway
|
66
66
|
# from . import test_location_content_transfer_mix
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
67
|
+
from . import test_zone_picking_base
|
68
|
+
from . import test_zone_picking_complete_mix_pack_flux
|
69
|
+
from . import test_zone_picking_start
|
70
|
+
from . import test_zone_picking_select_picking_type
|
71
|
+
from . import test_zone_picking_select_line
|
72
|
+
from . import test_zone_picking_select_line_no_prefill_qty
|
73
|
+
from . import test_zone_picking_select_line_first_scan_location
|
74
|
+
from . import test_zone_picking_set_line_destination
|
75
|
+
from . import test_zone_picking_set_line_destination_no_prefill_qty
|
76
|
+
from . import test_zone_picking_set_line_destination_pick_pack
|
77
|
+
from . import test_zone_picking_zero_check
|
78
|
+
from . import test_zone_picking_stock_issue
|
79
|
+
from . import test_zone_picking_change_pack_lot
|
80
|
+
from . import test_zone_picking_unload_buffer_lines
|
81
|
+
from . import test_zone_picking_unload_single
|
82
|
+
from . import test_zone_picking_unload_all
|
83
|
+
from . import test_zone_picking_unload_set_destination
|
84
|
+
from . import test_zone_picking_require_destination_package
|
85
85
|
from . import test_misc
|
86
86
|
from . import test_move_action_assign
|
87
87
|
from . import test_scan_anything
|
@@ -160,7 +160,7 @@ class ZonePickingSelectLineCase(ZonePickingCommonCase):
|
|
160
160
|
qty_done=10.0,
|
161
161
|
)
|
162
162
|
# first line done
|
163
|
-
move_line.
|
163
|
+
move_line.picked = True
|
164
164
|
# get the next one
|
165
165
|
response = self.service.dispatch(
|
166
166
|
"scan_source",
|
@@ -223,7 +223,10 @@ class ZonePickingSelectLineCase(ZonePickingCommonCase):
|
|
223
223
|
qty_done=10.0,
|
224
224
|
)
|
225
225
|
|
226
|
-
|
226
|
+
# FIXME: this case shouldn't be possible anymore
|
227
|
+
# because a check on stock.quant.package.write in odoo core
|
228
|
+
# prevents to update a location on a package w/o move lines.
|
229
|
+
def FIXME_test_scan_source_barcode_package_not_found(self):
|
227
230
|
"""Scan source: scanned package has no related move line,
|
228
231
|
next step 'select_line' expected.
|
229
232
|
"""
|
@@ -748,7 +751,7 @@ class ZonePickingSelectLineCase(ZonePickingCommonCase):
|
|
748
751
|
)
|
749
752
|
self.assertTrue(move_line_will_empty_location)
|
750
753
|
# But if we check the location without giving the move line as parameter,
|
751
|
-
# knowing that this move line hasn't its '
|
754
|
+
# knowing that this move line hasn't its 'qty_picked' field filled,
|
752
755
|
# the location won't be considered empty with such pending move line
|
753
756
|
move_line_will_empty_location = location_src.planned_qty_in_location_is_empty()
|
754
757
|
self.assertFalse(move_line_will_empty_location)
|
@@ -165,7 +165,7 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
165
165
|
# Check picking data
|
166
166
|
moves_after = self.picking1.move_ids
|
167
167
|
self.assertEqual(moves_before, moves_after)
|
168
|
-
self.assertEqual(move_line.
|
168
|
+
self.assertEqual(move_line.qty_picked, 10)
|
169
169
|
# Check response
|
170
170
|
move_lines = self.service._find_location_move_lines()
|
171
171
|
move_lines = move_lines.sorted(lambda x: x.move_id.priority, reverse=True)
|
@@ -273,11 +273,12 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
273
273
|
self.assertEqual(len(move_after), 1)
|
274
274
|
self.assertEqual(move_line.move_id.product_uom_qty, 6)
|
275
275
|
self.assertEqual(move_line.move_id.state, "done")
|
276
|
-
self.assertEqual(move_line.
|
276
|
+
self.assertEqual(move_line.quantity, 6)
|
277
|
+
self.assertEqual(move_line.qty_picked, 6)
|
277
278
|
self.assertEqual(move_after.product_uom_qty, 4)
|
278
279
|
self.assertEqual(move_after.state, "assigned")
|
279
280
|
self.assertEqual(move_after.move_line_ids.quantity, 4)
|
280
|
-
self.assertEqual(
|
281
|
+
self.assertEqual(move_after.move_line_ids.qty_picked, 0)
|
281
282
|
self.assertNotEqual(move_line.move_id, other_move_line.move_id)
|
282
283
|
# Check response
|
283
284
|
move_lines = self.service._find_location_move_lines()
|
@@ -407,7 +408,7 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
407
408
|
{
|
408
409
|
"result_package_id": self.free_package.id,
|
409
410
|
"quantity": 10,
|
410
|
-
"
|
411
|
+
"qty_picked": 10,
|
411
412
|
"shopfloor_user_id": self.env.user.id,
|
412
413
|
},
|
413
414
|
],
|
@@ -465,7 +466,7 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
465
466
|
{
|
466
467
|
"result_package_id": self.free_package.id,
|
467
468
|
"quantity": 6,
|
468
|
-
"
|
469
|
+
"qty_picked": 6,
|
469
470
|
"shopfloor_user_id": self.env.user.id,
|
470
471
|
},
|
471
472
|
],
|
@@ -476,7 +477,7 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
476
477
|
{
|
477
478
|
"result_package_id": new_move_line.package_id.id, # Unchanged
|
478
479
|
"quantity": 4,
|
479
|
-
"
|
480
|
+
"qty_picked": 0,
|
480
481
|
"shopfloor_user_id": False,
|
481
482
|
},
|
482
483
|
],
|
@@ -68,7 +68,7 @@ class ZonePickingSetLineDestinationPickPackCase(ZonePickingCommonCase):
|
|
68
68
|
move_line = self.picking1.move_line_ids
|
69
69
|
move_line.location_dest_id = self.shelf1
|
70
70
|
quantity_reserved = move_line.quantity
|
71
|
-
|
71
|
+
previous_qty_picked = move_line.qty_picked
|
72
72
|
# Confirm the destination with the right destination
|
73
73
|
response = self.service.dispatch(
|
74
74
|
"set_destination",
|
@@ -78,7 +78,7 @@ class ZonePickingSetLineDestinationPickPackCase(ZonePickingCommonCase):
|
|
78
78
|
"quantity": quantity_reserved,
|
79
79
|
},
|
80
80
|
)
|
81
|
-
self.assertEqual(move_line.
|
81
|
+
self.assertEqual(move_line.qty_picked, previous_qty_picked)
|
82
82
|
self.assert_response_set_line_destination(
|
83
83
|
response,
|
84
84
|
zone_location,
|
@@ -198,6 +198,7 @@ class ZonePickingSetLineDestinationPickPackCase(ZonePickingCommonCase):
|
|
198
198
|
{
|
199
199
|
"name": "TEST DEFAULT",
|
200
200
|
"package_type_id": self.carrier.test_default_packaging_id.id,
|
201
|
+
"product_id": self.free_product.id,
|
201
202
|
}
|
202
203
|
)
|
203
204
|
)
|
@@ -220,7 +221,7 @@ class ZonePickingSetLineDestinationPickPackCase(ZonePickingCommonCase):
|
|
220
221
|
{
|
221
222
|
"result_package_id": self.free_package.id,
|
222
223
|
"quantity": 10,
|
223
|
-
"
|
224
|
+
"qty_picked": 10,
|
224
225
|
"shopfloor_user_id": self.env.user.id,
|
225
226
|
},
|
226
227
|
],
|
@@ -208,10 +208,10 @@ class ZonePickingUnloadAllCase(ZonePickingCommonCase):
|
|
208
208
|
# picking validated
|
209
209
|
self.assertEqual(move_line_g.state, "done")
|
210
210
|
self.assertEqual(move_line_g.picking_id.state, "done")
|
211
|
-
self.assertEqual(move_line_g.
|
211
|
+
self.assertEqual(move_line_g.qty_picked, 6)
|
212
212
|
self.assertEqual(move_line_h.state, "done")
|
213
213
|
self.assertEqual(move_line_h.picking_id.state, "done")
|
214
|
-
self.assertEqual(move_line_h.
|
214
|
+
self.assertEqual(move_line_h.qty_picked, 3)
|
215
215
|
# current picking (backorder)
|
216
216
|
backorder = (move_line_g | move_line_h).picking_id.backorder_id
|
217
217
|
self.assertEqual(backorder, self.picking6)
|
@@ -44,7 +44,7 @@ class ZonePickingUnloadSingleCase(ZonePickingCommonCase):
|
|
44
44
|
# wrong package ID, and there is no more move line to unload from the buffer
|
45
45
|
# => get back on 'select_line' screen
|
46
46
|
move_line.write(
|
47
|
-
{"
|
47
|
+
{"qty_picked": 0, "shopfloor_user_id": False, "result_package_id": False}
|
48
48
|
)
|
49
49
|
response = self.service.dispatch(
|
50
50
|
"unload_scan_pack",
|
{odoo_addon_shopfloor-18.0.0.2.0.dist-info → odoo_addon_shopfloor-18.0.0.3.1.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.3.1
|
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:ba88a2ff0fc8dc7ea2a811a9507ddb4144cef230f98b4cbb1a6b506edefe389f
|
46
46
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
47
47
|
|
48
48
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
{odoo_addon_shopfloor-18.0.0.2.0.dist-info → odoo_addon_shopfloor-18.0.0.3.1.dist-info}/RECORD
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
odoo/addons/shopfloor/README.rst,sha256
|
1
|
+
odoo/addons/shopfloor/README.rst,sha256=-Hc6d6pxlXdCzqheiYYk6moSPEe6P0qxKv42ADAMEuI,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=apuuRwH0nXDJJ8podHpNQzXRen-B7PK259o7dFKBjIo,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
|
@@ -16,7 +16,7 @@ odoo/addons/shopfloor/actions/packaging.py,sha256=uZxD1bisNS_8M5ZQAHuOz2MR6l26XH
|
|
16
16
|
odoo/addons/shopfloor/actions/savepoint.py,sha256=bIpPUPg-2BbO8hz277kWnq4DP_cayhAB_v8Rp2mUHjg,1143
|
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
|
-
odoo/addons/shopfloor/actions/search.py,sha256=
|
19
|
+
odoo/addons/shopfloor/actions/search.py,sha256=9mcpeYo1iFQPdt_F2wLkqK5nRpR_gkFaOTReaM2Q7r4,7014
|
20
20
|
odoo/addons/shopfloor/actions/stock.py,sha256=oWy5QvZNv6IFbYhet0xtjV8T_bxrVi5UMy2-TIrUIko,11192
|
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
|
@@ -55,7 +55,7 @@ odoo/addons/shopfloor/models/shopfloor_app.py,sha256=ZfVahQYm0jzyeH7EtlOOhxYUif9
|
|
55
55
|
odoo/addons/shopfloor/models/shopfloor_menu.py,sha256=aiA8y9bfy0JDgaRr1wwbRXmkleTefui7wksBS2qOYUM,23207
|
56
56
|
odoo/addons/shopfloor/models/stock_location.py,sha256=InkhTmnqYZaXCXIarku-NS1T6BO8EmLxg2zBE0CHeZ8,3092
|
57
57
|
odoo/addons/shopfloor/models/stock_move.py,sha256=FcfRILSZygUvFgTd-AjjW_SoKgUiQtzC-4u_BzK65vw,5671
|
58
|
-
odoo/addons/shopfloor/models/stock_move_line.py,sha256=
|
58
|
+
odoo/addons/shopfloor/models/stock_move_line.py,sha256=YuYcJlTDpKsDnfs19UJynnsQI2gCvu64XlQArxFvKOM,11463
|
59
59
|
odoo/addons/shopfloor/models/stock_package_level.py,sha256=hXq9liDMmMDtWjeuMhhtAv0MjBvANk67-bo_XKkgJ1w,2152
|
60
60
|
odoo/addons/shopfloor/models/stock_picking.py,sha256=RdQ-YSY58LZYGexJ_qsNYB7eVIkgTc29MirIgUBOIjQ,5405
|
61
61
|
odoo/addons/shopfloor/models/stock_picking_batch.py,sha256=OTjeRqFlUeA7vuaGH6q-oy2z_lKPy4HUveSz5FlX1Ws,1466
|
@@ -78,12 +78,12 @@ odoo/addons/shopfloor/services/menu.py,sha256=m1eNOReTda_xD-p-m8k2Pn5cJQOLWTiaBG
|
|
78
78
|
odoo/addons/shopfloor/services/picking_batch.py,sha256=w51R5HHkQxCHle72k28VetXKfIRRh5GTaEXv6mhikvQ,4649
|
79
79
|
odoo/addons/shopfloor/services/service.py,sha256=oTYAPM3zwm5gWgEJyBsbQlq0AODPq9T8LPwt39NTUBw,6438
|
80
80
|
odoo/addons/shopfloor/services/single_pack_transfer.py,sha256=VotQyIH0AMbR0Wk159OMxwF2mERZlHRRXTF9ZLe6z0E,16111
|
81
|
-
odoo/addons/shopfloor/services/zone_picking.py,sha256=
|
81
|
+
odoo/addons/shopfloor/services/zone_picking.py,sha256=BI25T234hcjlgGDIMjsO6PfDUKuPP7WNtZ6TcWIHoxQ,84130
|
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=CIM7XKUP900WQaicQfZz6OoRfT-p1ShIepEPKYE1Gdg,18540
|
86
|
+
odoo/addons/shopfloor/tests/__init__.py,sha256=8t1Eocv-42M2tzBAkG3Wa6tsfhZIUIgxOspm3hqRCd4,4012
|
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
|
@@ -164,27 +164,26 @@ odoo/addons/shopfloor/tests/test_zone_picking_base.py,sha256=I4mw2TP74mwU1lTxKul
|
|
164
164
|
odoo/addons/shopfloor/tests/test_zone_picking_change_pack_lot.py,sha256=9Bg29Zp-vfgnF-P4U1xgXhHWhOWxfQkzzublZU2Ee-A,5414
|
165
165
|
odoo/addons/shopfloor/tests/test_zone_picking_complete_mix_pack_flux.py,sha256=R0xDc9LKVXCjx4KvXqrx0-Axk7PNWJ8aCZvspJG7Jxc,2325
|
166
166
|
odoo/addons/shopfloor/tests/test_zone_picking_require_destination_package.py,sha256=rYXFntqBjGhxWS_kxEBbhP5Lkd1AdTI15wSd6TIyVRA,2248
|
167
|
-
odoo/addons/shopfloor/tests/test_zone_picking_select_line.py,sha256=
|
167
|
+
odoo/addons/shopfloor/tests/test_zone_picking_select_line.py,sha256=0Go4E6ZKq-GDwa-Q8gVM4IXQGkSxYqZny7M5-6_YyZk,30130
|
168
168
|
odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py,sha256=uXDRd70zWRy08SinTULIzTJHEmC9u7FpVqOStuigElc,8464
|
169
|
-
odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py.bak,sha256=-TMgeipU2ROoSuyjLPMEMhK5EijwqJm0qS0xixK6TAE,7937
|
170
169
|
odoo/addons/shopfloor/tests/test_zone_picking_select_line_no_prefill_qty.py,sha256=9pKownGCjuXZDjQP4O3RHePRQ7bIIB7uV1GOCJDtdME,4360
|
171
170
|
odoo/addons/shopfloor/tests/test_zone_picking_select_picking_type.py,sha256=kuuPjKvpBRrj36z-lj4P7NMLqszkZasIdpvx9mayUQI,870
|
172
|
-
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py,sha256=
|
171
|
+
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py,sha256=fyO0LEb7MNzEoRT-NVtXzN19_l1gKGR35ncz_CTBFC4,27669
|
173
172
|
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_no_prefill_qty.py,sha256=Nn2xLfD3uHEAfDQ6INUR3np9B7wttADz_FZ-r4nbymI,5230
|
174
173
|
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_package_not_allowed.py,sha256=KXXnDDRfp9mTd0YoM5KSVFQMdBYTgsvMbNu1Nwkn8Vk,3669
|
175
|
-
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_pick_pack.py,sha256=
|
174
|
+
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_pick_pack.py,sha256=rtRqQ0F6Vf_gIdI8vA7VWH70zgPHyvWgbOF9syBl5Q4,9006
|
176
175
|
odoo/addons/shopfloor/tests/test_zone_picking_start.py,sha256=aINReAOIPcv10977iDD0imjYDmqKG7bhgFOvYLSLgjs,7195
|
177
176
|
odoo/addons/shopfloor/tests/test_zone_picking_stock_issue.py,sha256=VdbSdxYL7w3M_vxTTv7ekY5UQpSoAMRaL4zqXovZcss,4498
|
178
|
-
odoo/addons/shopfloor/tests/test_zone_picking_unload_all.py,sha256=
|
177
|
+
odoo/addons/shopfloor/tests/test_zone_picking_unload_all.py,sha256=jDBRSxTJiZeiVUGOp5VRo4BYNDdI6r2UGZPEcoe7UD0,13057
|
179
178
|
odoo/addons/shopfloor/tests/test_zone_picking_unload_buffer_lines.py,sha256=dVb4G4peQPb8mkxTpXqMGc3k-SrokP6y1krqJtzJDIk,4362
|
180
179
|
odoo/addons/shopfloor/tests/test_zone_picking_unload_set_destination.py,sha256=3TtVsNGEgAGNNn5m2kS8yN7fxw1q-nZQcRAuMYetP2U,13625
|
181
|
-
odoo/addons/shopfloor/tests/test_zone_picking_unload_single.py,sha256=
|
180
|
+
odoo/addons/shopfloor/tests/test_zone_picking_unload_single.py,sha256=QmUbxYansd1zpHBpRePkM25DSOuWZb9qYLOLjESS3kU,4387
|
182
181
|
odoo/addons/shopfloor/tests/test_zone_picking_zero_check.py,sha256=HB0hrvRsH7Ucv1pQm-D8dMWq6tQuTbrI8CPFqZh0Zb0,1376
|
183
182
|
odoo/addons/shopfloor/views/shopfloor_menu.xml,sha256=LK_XdKawKqXPTaE1tq4r5dXR62CmDQHl8SwrZnLeyJM,9319
|
184
183
|
odoo/addons/shopfloor/views/stock_location.xml,sha256=d7iqbOQZbb5YPSdAXlQ6spcj8dUvQ37DpEGuaLX5B1M,829
|
185
184
|
odoo/addons/shopfloor/views/stock_move_line.xml,sha256=AmIO95-G0AD5i5C3x_BQL_NARXvyCfe4mg9iM97wD1U,1996
|
186
185
|
odoo/addons/shopfloor/views/stock_picking_type.xml,sha256=M3U8xijiL6ZJUx2IiYelIYECsCRtOCU1J6lwlWzx3Jo,778
|
187
|
-
odoo_addon_shopfloor-18.0.0.
|
188
|
-
odoo_addon_shopfloor-18.0.0.
|
189
|
-
odoo_addon_shopfloor-18.0.0.
|
190
|
-
odoo_addon_shopfloor-18.0.0.
|
186
|
+
odoo_addon_shopfloor-18.0.0.3.1.dist-info/METADATA,sha256=KAzoXnLYJsO1nn3dxi3htUGhC7IL589REK-Pwi91fos,7580
|
187
|
+
odoo_addon_shopfloor-18.0.0.3.1.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
|
188
|
+
odoo_addon_shopfloor-18.0.0.3.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
|
189
|
+
odoo_addon_shopfloor-18.0.0.3.1.dist-info/RECORD,,
|
@@ -1,202 +0,0 @@
|
|
1
|
-
# Copyright 2023 Camptocamp SA (http://www.camptocamp.com)
|
2
|
-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
3
|
-
|
4
|
-
from .test_zone_picking_base import ZonePickingCommonCase
|
5
|
-
|
6
|
-
|
7
|
-
class ZonePickingSelectLineFirstScanLocationCase(ZonePickingCommonCase):
|
8
|
-
"""Tests for endpoint used from select_line with option 'First scan location'
|
9
|
-
|
10
|
-
* /scan_source
|
11
|
-
|
12
|
-
"""
|
13
|
-
|
14
|
-
def setUp(self):
|
15
|
-
super().setUp()
|
16
|
-
self.service.work.current_picking_type = self.picking1.picking_type_id
|
17
|
-
self.menu.sudo().scan_location_or_pack_first = True
|
18
|
-
|
19
|
-
def test_scan_source_first_the_product_not_ok(self):
|
20
|
-
"""Check first scanning a product barcode is not allowed."""
|
21
|
-
response = self.service.dispatch(
|
22
|
-
"scan_source",
|
23
|
-
params={"barcode": self.product_a.barcode},
|
24
|
-
)
|
25
|
-
move_lines = self.service._find_location_move_lines(
|
26
|
-
locations=self.zone_location,
|
27
|
-
package=False,
|
28
|
-
)
|
29
|
-
self.assertTrue(response.get("data").get("select_line"))
|
30
|
-
self.assert_response_select_line(
|
31
|
-
response,
|
32
|
-
zone_location=self.zone_location,
|
33
|
-
picking_type=self.picking_type,
|
34
|
-
message=self.service.msg_store.barcode_not_found(),
|
35
|
-
move_lines=move_lines,
|
36
|
-
location_first=True,
|
37
|
-
)
|
38
|
-
|
39
|
-
def test_scan_source_scan_location_then_product_ok(self):
|
40
|
-
"""Check scanning location and then product is fine."""
|
41
|
-
# Have the same product multiple time in sublocation 2
|
42
|
-
pickingA = self._create_picking(
|
43
|
-
lines=[(self.product_b, 12), (self.product_c, 13)]
|
44
|
-
)
|
45
|
-
self._fill_stock_for_moves(
|
46
|
-
pickingA.move_lines, in_lot=True, location=self.zone_sublocation2
|
47
|
-
)
|
48
|
-
pickingA.action_assign()
|
49
|
-
# Scan product B, send sublocation to simulate a previous scan for a location
|
50
|
-
response = self.service.dispatch(
|
51
|
-
"scan_source",
|
52
|
-
params={
|
53
|
-
"barcode": self.product_b.barcode,
|
54
|
-
"sublocation_id": self.zone_sublocation2.id,
|
55
|
-
},
|
56
|
-
)
|
57
|
-
move_lines = self.service._find_location_move_lines(
|
58
|
-
locations=self.zone_sublocation2, product=self.product_b
|
59
|
-
)
|
60
|
-
self.assert_response_select_line(
|
61
|
-
response,
|
62
|
-
zone_location=self.zone_location,
|
63
|
-
picking_type=self.picking_type,
|
64
|
-
message=self.service.msg_store.several_move_with_different_lot(),
|
65
|
-
move_lines=move_lines,
|
66
|
-
product=self.product_b,
|
67
|
-
sublocation=self.zone_sublocation2,
|
68
|
-
location_first=True,
|
69
|
-
)
|
70
|
-
|
71
|
-
def test_scan_source_can_not_select_line_with_package(self):
|
72
|
-
"""Do not allow to scan product with package without scanning pack first."""
|
73
|
-
# Picking 1 with one product in a package is already in sub location 1
|
74
|
-
pickingA = self._create_picking(lines=[(self.product_a, 13)])
|
75
|
-
self._fill_stock_for_moves(
|
76
|
-
pickingA.move_lines[0], in_package=True, location=self.zone_sublocation1
|
77
|
-
)
|
78
|
-
pickingA.action_assign()
|
79
|
-
# Scanning a product after having scan a location (sublocation_id)
|
80
|
-
response = self.service.dispatch(
|
81
|
-
"scan_source",
|
82
|
-
params={
|
83
|
-
"barcode": self.product_a.barcode,
|
84
|
-
"sublocation_id": self.zone_sublocation1.id,
|
85
|
-
},
|
86
|
-
)
|
87
|
-
self.assertEqual(response["next_state"], "select_line")
|
88
|
-
move_lines = self.service._find_location_move_lines(
|
89
|
-
locations=self.zone_sublocation1, package=False, product=self.product_a
|
90
|
-
)
|
91
|
-
self.assert_response_select_line(
|
92
|
-
response,
|
93
|
-
zone_location=self.zone_location,
|
94
|
-
sublocation=self.zone_sublocation1,
|
95
|
-
picking_type=self.picking_type,
|
96
|
-
message=self.service.msg_store.product_not_found(),
|
97
|
-
move_lines=move_lines,
|
98
|
-
location_first=True,
|
99
|
-
)
|
100
|
-
|
101
|
-
def test_scan_source_scan_location_no_lines_without_package(self):
|
102
|
-
"""Check list of lines when first scanning location.
|
103
|
-
|
104
|
-
With the scan_location_or_pack_first option on. When scanning first the
|
105
|
-
location and no lines without package exist, ask to scan a package.
|
106
|
-
|
107
|
-
"""
|
108
|
-
# Picking 1 with one product in a package is already in sub location 1
|
109
|
-
pickingA = self._create_picking(lines=[(self.product_a, 13)])
|
110
|
-
self._fill_stock_for_moves(
|
111
|
-
pickingA.move_lines[0], in_package=True, location=self.zone_sublocation1
|
112
|
-
)
|
113
|
-
pickingA.action_assign()
|
114
|
-
response = self.service.dispatch(
|
115
|
-
"scan_source",
|
116
|
-
params={
|
117
|
-
"barcode": self.zone_sublocation1.barcode,
|
118
|
-
},
|
119
|
-
)
|
120
|
-
move_lines = self.service._find_location_move_lines(
|
121
|
-
locations=self.zone_sublocation1, package=False
|
122
|
-
)
|
123
|
-
self.assert_response_select_line(
|
124
|
-
response,
|
125
|
-
zone_location=self.zone_location,
|
126
|
-
sublocation=self.zone_sublocation1,
|
127
|
-
picking_type=self.picking_type,
|
128
|
-
message=self.service.msg_store.several_packs_in_location(
|
129
|
-
self.zone_sublocation1
|
130
|
-
),
|
131
|
-
move_lines=move_lines,
|
132
|
-
location_first=True,
|
133
|
-
)
|
134
|
-
|
135
|
-
def test_scan_source_scan_package_first_with_two_product(self):
|
136
|
-
"""Scan a package with two product and then scan a product."""
|
137
|
-
pickingA = self._create_picking(
|
138
|
-
lines=[(self.product_a, 13), (self.product_b, 5)]
|
139
|
-
)
|
140
|
-
self._fill_stock_for_moves(
|
141
|
-
pickingA.move_lines, in_package=True, location=self.zone_sublocation1
|
142
|
-
)
|
143
|
-
pickingA.action_assign()
|
144
|
-
package = pickingA.package_level_ids[0].package_id
|
145
|
-
response = self.service.dispatch(
|
146
|
-
"scan_source",
|
147
|
-
params={
|
148
|
-
"barcode": package.name,
|
149
|
-
},
|
150
|
-
)
|
151
|
-
move_lines = self.service._find_location_move_lines(
|
152
|
-
locations=self.zone_sublocation1, package=package
|
153
|
-
)
|
154
|
-
self.assertTrue(len(move_lines), 2)
|
155
|
-
self.assert_response_select_line(
|
156
|
-
response,
|
157
|
-
zone_location=self.zone_location,
|
158
|
-
picking_type=self.picking_type,
|
159
|
-
message=self.service.msg_store.several_products_in_package(package),
|
160
|
-
move_lines=move_lines,
|
161
|
-
location_first=True,
|
162
|
-
package=package,
|
163
|
-
)
|
164
|
-
response = self.service.dispatch(
|
165
|
-
"scan_source",
|
166
|
-
params={"barcode": self.product_a.barcode, "package_id": package.id},
|
167
|
-
)
|
168
|
-
move_line = pickingA.move_line_ids[0]
|
169
|
-
self.assert_response_set_line_destination(
|
170
|
-
response,
|
171
|
-
zone_location=self.zone_location,
|
172
|
-
picking_type=self.picking_type,
|
173
|
-
move_line=move_line,
|
174
|
-
qty_done=13.0,
|
175
|
-
)
|
176
|
-
|
177
|
-
# def test_scan_source_scan_package_first_with_one_line(self):
|
178
|
-
# pickingA = self._create_picking(lines=[(self.product_a, 13)])
|
179
|
-
# self._fill_stock_for_moves(
|
180
|
-
# pickingA.move_lines[0], in_package=True, location=self.zone_sublocation1
|
181
|
-
# )
|
182
|
-
# pickingA.action_assign()
|
183
|
-
# package = pickingA.package_level_ids[0].package_id
|
184
|
-
# response = self.service.dispatch(
|
185
|
-
# "scan_source",
|
186
|
-
# params={
|
187
|
-
# "barcode": package.name,
|
188
|
-
# },
|
189
|
-
# )
|
190
|
-
# move_lines = self.service._find_location_move_lines(
|
191
|
-
# locations=self.zone_sublocation1, package=package
|
192
|
-
# )
|
193
|
-
# self.assert_response_select_line(
|
194
|
-
# response,
|
195
|
-
# zone_location=self.zone_location,
|
196
|
-
# picking_type=self.picking_type,
|
197
|
-
# # message=self.service.msg_store.location_empty_scan_package(
|
198
|
-
# # self.zone_sublocation1
|
199
|
-
# # ),
|
200
|
-
# move_lines=move_lines,
|
201
|
-
# # location_first=True,
|
202
|
-
# )
|
{odoo_addon_shopfloor-18.0.0.2.0.dist-info → odoo_addon_shopfloor-18.0.0.3.1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|