odoo-addon-shopfloor 18.0.0.1.2__py3-none-any.whl → 18.0.0.3.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/message.py +3 -3
- odoo/addons/shopfloor/models/stock_move_line.py +3 -3
- odoo/addons/shopfloor/models/stock_picking.py +2 -5
- odoo/addons/shopfloor/services/checkout.py +64 -54
- odoo/addons/shopfloor/services/cluster_picking.py +3 -2
- odoo/addons/shopfloor/services/delivery.py +14 -15
- odoo/addons/shopfloor/services/zone_picking.py +12 -9
- odoo/addons/shopfloor/static/description/index.html +1 -1
- odoo/addons/shopfloor/tests/__init__.py +50 -48
- odoo/addons/shopfloor/tests/common.py +3 -1
- odoo/addons/shopfloor/tests/test_checkout_auto_post.py +9 -8
- odoo/addons/shopfloor/tests/test_checkout_base.py +1 -1
- odoo/addons/shopfloor/tests/test_checkout_cancel_line.py +12 -8
- odoo/addons/shopfloor/tests/test_checkout_done.py +5 -5
- odoo/addons/shopfloor/tests/test_checkout_list_delivery_packaging.py +0 -2
- odoo/addons/shopfloor/tests/test_checkout_list_package.py +19 -12
- odoo/addons/shopfloor/tests/test_checkout_new_package.py +7 -7
- odoo/addons/shopfloor/tests/test_checkout_no_package.py +6 -6
- odoo/addons/shopfloor/tests/test_checkout_scan.py +1 -1
- odoo/addons/shopfloor/tests/test_checkout_scan_dest_location.py +2 -2
- odoo/addons/shopfloor/tests/test_checkout_scan_line.py +3 -1
- odoo/addons/shopfloor/tests/test_checkout_scan_package_action.py +14 -14
- odoo/addons/shopfloor/tests/test_checkout_scan_package_action_no_prefill_qty.py +9 -9
- odoo/addons/shopfloor/tests/test_checkout_select_line.py +1 -1
- odoo/addons/shopfloor/tests/test_checkout_select_package_base.py +6 -4
- odoo/addons/shopfloor/tests/test_checkout_set_qty.py +12 -11
- odoo/addons/shopfloor/tests/test_checkout_summary.py +2 -2
- odoo/addons/shopfloor/tests/test_delivery_base.py +3 -3
- odoo/addons/shopfloor/tests/test_delivery_done.py +1 -2
- odoo/addons/shopfloor/tests/test_delivery_reset_qty_done_line.py +2 -2
- odoo/addons/shopfloor/tests/test_delivery_reset_qty_done_pack.py +2 -2
- odoo/addons/shopfloor/tests/test_delivery_scan_deliver.py +11 -11
- odoo/addons/shopfloor/tests/test_delivery_set_qty_done_line.py +1 -1
- odoo/addons/shopfloor/tests/test_delivery_set_qty_done_pack.py +1 -1
- odoo/addons/shopfloor/tests/test_zone_picking_select_line.py +5 -2
- 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.1.2.dist-info → odoo_addon_shopfloor-18.0.0.3.0.dist-info}/METADATA +2 -2
- {odoo_addon_shopfloor-18.0.0.1.2.dist-info → odoo_addon_shopfloor-18.0.0.3.0.dist-info}/RECORD +45 -46
- {odoo_addon_shopfloor-18.0.0.1.2.dist-info → odoo_addon_shopfloor-18.0.0.3.0.dist-info}/WHEEL +1 -1
- odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py.bak +0 -202
- {odoo_addon_shopfloor-18.0.0.1.2.dist-info → odoo_addon_shopfloor-18.0.0.3.0.dist-info}/top_level.txt +0 -0
@@ -109,7 +109,7 @@ class CheckoutSelectLineCase(CheckoutCommonCase, CheckoutSelectPackageMixin):
|
|
109
109
|
def test_select_line_all_lines_done(self):
|
110
110
|
# set all lines as done
|
111
111
|
self.picking.move_line_ids.write(
|
112
|
-
{"
|
112
|
+
{"qty_picked": 10.0, "shopfloor_checkout_done": True}
|
113
113
|
)
|
114
114
|
response = self.service.dispatch(
|
115
115
|
"select_line",
|
@@ -42,9 +42,11 @@ class CheckoutSelectPackageMixin:
|
|
42
42
|
sorted(selected_lines.ids), sorted([line.id for line in lines_quantities])
|
43
43
|
)
|
44
44
|
for line, quantity in lines_quantities.items():
|
45
|
-
self.assertEqual(line.
|
45
|
+
self.assertEqual(line.qty_picked, quantity)
|
46
46
|
for line in deselected_lines:
|
47
|
-
self.assertEqual(
|
47
|
+
self.assertEqual(
|
48
|
+
line.qty_picked, 0, "Lines deselected must have no qty done"
|
49
|
+
)
|
48
50
|
self._assert_selected_response(
|
49
51
|
response, selected_lines, message=message, packing_info=packing_info
|
50
52
|
)
|
@@ -57,11 +59,11 @@ class CheckoutSelectPackageMixin:
|
|
57
59
|
unselected_lines = picking.move_line_ids - selected_lines
|
58
60
|
for line in selected_lines - related_lines:
|
59
61
|
self.assertEqual(
|
60
|
-
line.
|
62
|
+
line.qty_picked,
|
61
63
|
line.quantity,
|
62
64
|
"Scanned lines must have their qty done set to the reserved quantity",
|
63
65
|
)
|
64
66
|
for line in unselected_lines + related_lines:
|
65
|
-
self.assertEqual(line.
|
67
|
+
self.assertEqual(line.qty_picked, 0)
|
66
68
|
package_lines = selected_lines + related_lines
|
67
69
|
self._assert_selected_response(response, package_lines, message=message, **kw)
|
@@ -24,15 +24,15 @@ class CheckoutSetQtyCommonCase(CheckoutCommonCase, CheckoutSelectPackageMixin):
|
|
24
24
|
def setUp(self):
|
25
25
|
super().setUp()
|
26
26
|
# we assume we have called /select_line on pack one, so by default, we
|
27
|
-
# expect the lines for product a and b to have their
|
27
|
+
# expect the lines for product a and b to have their picked qty set to
|
28
28
|
# their reserved quantity at the start of the tests
|
29
29
|
self.selected_lines = self.moves_pack1.move_line_ids
|
30
30
|
self.deselected_lines = self.moves_pack2.move_line_ids
|
31
31
|
self.service._select_lines(self.selected_lines)
|
32
32
|
self.assertTrue(
|
33
|
-
all(line.
|
33
|
+
all(line.qty_picked == line.quantity for line in self.selected_lines)
|
34
34
|
)
|
35
|
-
self.assertTrue(all(line.
|
35
|
+
self.assertTrue(all(not line.picked for line in self.deselected_lines))
|
36
36
|
|
37
37
|
|
38
38
|
class CheckoutResetLineQtyCase(CheckoutSetQtyCommonCase):
|
@@ -83,7 +83,7 @@ class CheckoutSetLineQtyCase(CheckoutSetQtyCommonCase):
|
|
83
83
|
def test_set_line_qty_ok(self):
|
84
84
|
selected_lines = self.moves_pack1.move_line_ids
|
85
85
|
# do as if the user removed the qties of the 2 selected lines
|
86
|
-
selected_lines.
|
86
|
+
selected_lines.qty_picked = 0
|
87
87
|
line_to_set = selected_lines[0]
|
88
88
|
line_no_qty = selected_lines[1]
|
89
89
|
# we want to check that when we give the package id, we get
|
@@ -96,8 +96,9 @@ class CheckoutSetLineQtyCase(CheckoutSetQtyCommonCase):
|
|
96
96
|
"move_line_id": line_to_set.id,
|
97
97
|
},
|
98
98
|
)
|
99
|
-
self.assertEqual(line_to_set.
|
100
|
-
self.assertEqual(line_no_qty.
|
99
|
+
self.assertEqual(line_to_set.qty_picked, line_to_set.quantity)
|
100
|
+
self.assertEqual(line_no_qty.qty_picked, 0)
|
101
|
+
self.assertFalse(line_no_qty.picked)
|
101
102
|
self._assert_selected_qties(
|
102
103
|
response,
|
103
104
|
selected_lines,
|
@@ -145,8 +146,8 @@ class CheckoutSetCustomQtyCase(CheckoutSetQtyCommonCase):
|
|
145
146
|
"qty_done": new_qty,
|
146
147
|
},
|
147
148
|
)
|
148
|
-
self.assertEqual(line_to_change.
|
149
|
-
self.assertEqual(line_keep_qty.
|
149
|
+
self.assertEqual(line_to_change.qty_picked, new_qty)
|
150
|
+
self.assertEqual(line_keep_qty.qty_picked, line_keep_qty.quantity)
|
150
151
|
self._assert_selected_qties(
|
151
152
|
response,
|
152
153
|
selected_lines,
|
@@ -180,7 +181,7 @@ class CheckoutSetCustomQtyCase(CheckoutSetQtyCommonCase):
|
|
180
181
|
selected_lines = self.moves_pack1.move_line_ids
|
181
182
|
line1 = selected_lines[0]
|
182
183
|
# modify so we can check that a too high quantity set the max
|
183
|
-
line1.
|
184
|
+
line1.qty_picked = 1
|
184
185
|
line2 = selected_lines[1]
|
185
186
|
response = self.service.dispatch(
|
186
187
|
"set_custom_qty",
|
@@ -240,8 +241,8 @@ class CheckoutSetCustomQtyCase(CheckoutSetQtyCommonCase):
|
|
240
241
|
"qty_done": new_qty,
|
241
242
|
},
|
242
243
|
)
|
243
|
-
self.assertEqual(line_to_change.
|
244
|
-
self.assertEqual(line_keep_qty.
|
244
|
+
self.assertEqual(line_to_change.qty_picked, new_qty)
|
245
|
+
self.assertEqual(line_keep_qty.qty_picked, line_keep_qty.quantity)
|
245
246
|
new_lines = [
|
246
247
|
x for x in self.moves_pack1.move_line_ids if x not in selected_lines
|
247
248
|
]
|
@@ -35,7 +35,7 @@ class CheckoutSummaryCase(CheckoutCommonCase):
|
|
35
35
|
self.picking.action_assign()
|
36
36
|
# satisfy only few lines
|
37
37
|
for ml in self.picking.move_line_ids[:2]:
|
38
|
-
ml.
|
38
|
+
ml.picked = True
|
39
39
|
ml.shopfloor_checkout_done = True
|
40
40
|
response = self.service.dispatch(
|
41
41
|
"summary", params={"picking_id": self.picking.id}
|
@@ -54,7 +54,7 @@ class CheckoutSummaryCase(CheckoutCommonCase):
|
|
54
54
|
self.picking.action_assign()
|
55
55
|
# satisfy only all lines
|
56
56
|
for ml in self.picking.move_line_ids:
|
57
|
-
ml.
|
57
|
+
ml.picked = True
|
58
58
|
ml.shopfloor_checkout_done = True
|
59
59
|
response = self.service.dispatch(
|
60
60
|
"summary", params={"picking_id": self.picking.id}
|
@@ -129,7 +129,7 @@ class DeliveryCommonCase(CommonCase):
|
|
129
129
|
message=message,
|
130
130
|
)
|
131
131
|
|
132
|
-
def
|
132
|
+
def assert_qty_picked(self, move_lines, qties=None):
|
133
133
|
"""Ensure that the quantities done are the expected ones.
|
134
134
|
|
135
135
|
If `qties` is not defined, the expected qties are `product_uom_qty`
|
@@ -140,9 +140,9 @@ class DeliveryCommonCase(CommonCase):
|
|
140
140
|
assert len(move_lines) == len(qties), "'qties' doesn't match 'move_lines'"
|
141
141
|
expected_qties = []
|
142
142
|
for qty in qties:
|
143
|
-
expected_qties.append({"
|
143
|
+
expected_qties.append({"qty_picked": qty})
|
144
144
|
else:
|
145
|
-
expected_qties = [{"
|
145
|
+
expected_qties = [{"qty_picked": line.quantity} for line in move_lines]
|
146
146
|
self.assertRecordValues(move_lines, expected_qties)
|
147
147
|
package_level = move_lines.package_level_id
|
148
148
|
if package_level:
|
@@ -44,8 +44,7 @@ class DeliveryDoneCase(DeliveryCommonCase):
|
|
44
44
|
def test_done_all_qty_done(self):
|
45
45
|
# Do not use the /set_qty_done_line endpoint to set done qties to not
|
46
46
|
# update the picking to 'done' state automatically
|
47
|
-
|
48
|
-
move_line.qty_done = move_line.quantity
|
47
|
+
self.picking.move_line_ids.picked = True
|
49
48
|
response = self.service.dispatch("done", params={"picking_id": self.picking.id})
|
50
49
|
self.assert_response_deliver(
|
51
50
|
response,
|
@@ -72,14 +72,14 @@ class DeliveryResetQtyDoneLineCase(DeliveryCommonCase):
|
|
72
72
|
"set_qty_done_line",
|
73
73
|
params={"move_line_id": move_line.id, "picking_id": self.picking.id},
|
74
74
|
)
|
75
|
-
self.assertTrue(move_line.
|
75
|
+
self.assertTrue(move_line.qty_picked == move_line.quantity)
|
76
76
|
# Reset it, no related move lines are "done"
|
77
77
|
response = self.service.dispatch(
|
78
78
|
"reset_qty_done_line",
|
79
79
|
params={"move_line_id": move_line.id, "picking_id": self.picking.id},
|
80
80
|
)
|
81
81
|
self.assert_response_deliver(response, picking=self.picking)
|
82
|
-
self.assertFalse(move_line.
|
82
|
+
self.assertFalse(move_line.qty_picked)
|
83
83
|
|
84
84
|
def test_reset_qty_done_line_with_package(self):
|
85
85
|
move_line = self.pack1_moves[0].mapped("move_line_ids")
|
@@ -73,14 +73,14 @@ class DeliveryResetQtyDonePackCase(DeliveryCommonCase):
|
|
73
73
|
"set_qty_done_pack",
|
74
74
|
params={"package_id": package.id, "picking_id": self.picking.id},
|
75
75
|
)
|
76
|
-
self.assertTrue(all(ml.
|
76
|
+
self.assertTrue(all(ml.qty_picked == ml.quantity for ml in move_lines))
|
77
77
|
# Reset it, no related move lines are "done"
|
78
78
|
response = self.service.dispatch(
|
79
79
|
"reset_qty_done_pack",
|
80
80
|
params={"package_id": package.id, "picking_id": self.picking.id},
|
81
81
|
)
|
82
82
|
self.assert_response_deliver(response, picking=self.picking)
|
83
|
-
self.assertFalse(any(ml.
|
83
|
+
self.assertFalse(any(ml.picked for ml in move_lines))
|
84
84
|
|
85
85
|
def test_reset_qty_done_pack_picking_status(self):
|
86
86
|
package1 = self.pack1_moves.mapped("move_line_ids").mapped("package_id")
|
@@ -139,7 +139,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
139
139
|
|
140
140
|
def _test_scan_set_done_ok(self, move_lines, barcode, qties=None):
|
141
141
|
response = self.service.dispatch("scan_deliver", params={"barcode": barcode})
|
142
|
-
self.
|
142
|
+
self.assert_qty_picked(move_lines, qties)
|
143
143
|
picking = move_lines.move_id.picking_id
|
144
144
|
if picking.state == "done":
|
145
145
|
self.assert_response_deliver(
|
@@ -189,7 +189,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
189
189
|
|
190
190
|
def test_scan_deliver_scan_product_not_in_package(self):
|
191
191
|
"""Check scanning product increment quantity done by one."""
|
192
|
-
for
|
192
|
+
for qty_picked in range(1, 3):
|
193
193
|
response = self.service.dispatch(
|
194
194
|
"scan_deliver",
|
195
195
|
params={
|
@@ -197,7 +197,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
197
197
|
"picking_id": self.picking.id,
|
198
198
|
},
|
199
199
|
)
|
200
|
-
self.assertEqual(self.raw_move.move_line_ids.
|
200
|
+
self.assertEqual(self.raw_move.move_line_ids.qty_picked, qty_picked)
|
201
201
|
|
202
202
|
self.assert_response_deliver(
|
203
203
|
response,
|
@@ -306,7 +306,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
306
306
|
response,
|
307
307
|
picking=self.picking,
|
308
308
|
)
|
309
|
-
self.assertEqual(line.
|
309
|
+
self.assertEqual(line.qty_picked, 1)
|
310
310
|
self.assertEqual(line.state, "assigned")
|
311
311
|
for _ in range(int(line.quantity) - 1):
|
312
312
|
self.service.dispatch(
|
@@ -316,7 +316,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
316
316
|
"picking_id": self.picking.id,
|
317
317
|
},
|
318
318
|
)
|
319
|
-
self.assertEqual(line.
|
319
|
+
self.assertEqual(line.qty_picked, self.raw_lot_move.product_uom_qty)
|
320
320
|
|
321
321
|
def test_scan_deliver_scan_lot_with_prepackaged_product(self):
|
322
322
|
"""Check scanning a lot process only one piece/unit of this lot.
|
@@ -330,7 +330,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
330
330
|
self.assert_response_deliver(
|
331
331
|
response, message=self.service.msg_store.transfer_complete(self.picking)
|
332
332
|
)
|
333
|
-
self.assertEqual(line.
|
333
|
+
self.assertEqual(line.qty_picked, 1)
|
334
334
|
self.assertEqual(line.move_id.state, "done")
|
335
335
|
self.assertEqual(self.picking.state, "done")
|
336
336
|
self.assertTrue(self.picking.backorder_ids)
|
@@ -364,7 +364,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
364
364
|
"scan_deliver", params={"barcode": self.packaging.barcode}
|
365
365
|
)
|
366
366
|
self.assert_response_deliver(response, picking=self.picking)
|
367
|
-
self.assertEqual(line.
|
367
|
+
self.assertEqual(line.qty_picked, self.packaging.qty)
|
368
368
|
|
369
369
|
def test_scan_deliver_scan_product_packaging_with_prepackaged_product(self):
|
370
370
|
"""Check scanning a product packaging use the packaging quantity.
|
@@ -383,7 +383,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
383
383
|
self.assert_response_deliver(
|
384
384
|
response, message=self.service.msg_store.transfer_complete(self.picking)
|
385
385
|
)
|
386
|
-
self.assertEqual(line.
|
386
|
+
self.assertEqual(line.qty_picked, self.packaging.qty)
|
387
387
|
|
388
388
|
def test_scan_deliver_scan_product_packaging_partial_qty(self):
|
389
389
|
# Scan a product packaging with a smaller qty than the move line
|
@@ -398,7 +398,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
398
398
|
"scan_deliver", params={"barcode": self.packaging.barcode}
|
399
399
|
)
|
400
400
|
self.assert_response_deliver(response, picking=self.picking)
|
401
|
-
self.assertEqual(line.
|
401
|
+
self.assertEqual(line.qty_picked, self.packaging.qty)
|
402
402
|
self.assertTrue(line.move_id.product_qty > self.packaging.qty)
|
403
403
|
# Process the remaining qties, still by scanning the packaging
|
404
404
|
response = self.service.dispatch(
|
@@ -428,7 +428,7 @@ class DeliveryScanDeliverCase(DeliveryCommonCase):
|
|
428
428
|
response,
|
429
429
|
message=self.service.msg_store.transfer_complete(self.picking),
|
430
430
|
)
|
431
|
-
self.assertEqual(line.
|
431
|
+
self.assertEqual(line.qty_picked, self.packaging.qty)
|
432
432
|
self.assertEqual(line.move_id.product_qty, self.packaging.qty)
|
433
433
|
self.assertEqual(line.move_id.state, "done")
|
434
434
|
self.assertTrue(self.picking.backorder_ids)
|
@@ -688,7 +688,7 @@ class DeliveryScanDeliverSpecialCase(DeliveryCommonCase):
|
|
688
688
|
picking = self._create_picking(lines=[(self.product_a, 10)])
|
689
689
|
self._fill_stock_for_moves(picking.move_ids, in_package=True)
|
690
690
|
picking.action_assign()
|
691
|
-
picking.move_line_ids.
|
691
|
+
picking.move_line_ids.picked = True
|
692
692
|
picking._action_done()
|
693
693
|
response = self.service.dispatch(
|
694
694
|
"scan_deliver", params={"barcode": picking.name}
|
@@ -31,7 +31,7 @@ class DeliverySetQtyDoneLineCase(DeliveryCommonCase):
|
|
31
31
|
"set_qty_done_line",
|
32
32
|
params={"move_line_id": move_line.id, "picking_id": self.picking.id},
|
33
33
|
)
|
34
|
-
self.
|
34
|
+
self.assert_qty_picked(move_line)
|
35
35
|
self.assert_response_deliver(response, picking=self.picking)
|
36
36
|
|
37
37
|
def test_set_qty_done_line_picking_not_found(self):
|
@@ -44,7 +44,7 @@ class DeliverySetQtyDonePackCase(DeliveryCommonCase):
|
|
44
44
|
"set_qty_done_pack",
|
45
45
|
params={"package_id": package.id, "picking_id": self.picking.id},
|
46
46
|
)
|
47
|
-
self.
|
47
|
+
self.assert_qty_picked(move_lines, qties=qties)
|
48
48
|
self.assert_response_deliver(response, picking=self.picking)
|
49
49
|
|
50
50
|
def test_set_qty_done_pack_picking_not_found(self):
|
@@ -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._pick_qty(move_line.quantity)
|
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
|
"""
|
@@ -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
|
-
previous_qty_done = move_line.
|
71
|
+
previous_qty_done = 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_done)
|
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.1.2.dist-info → odoo_addon_shopfloor-18.0.0.3.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.3.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:039c0e1f10bbf63b4fd82fea958772168aea3e98a4fb38955960a74f946bd07d
|
46
46
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
47
47
|
|
48
48
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|