odoo-addon-shopfloor 16.0.2.4.1__py3-none-any.whl → 16.0.2.4.2.3__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/data/shopfloor_scenario_data.xml +2 -1
- odoo/addons/shopfloor/i18n/shopfloor.pot +27 -0
- odoo/addons/shopfloor/migrations/16.0.2.4.2/post-migration.py +29 -0
- odoo/addons/shopfloor/models/shopfloor_menu.py +41 -1
- odoo/addons/shopfloor/services/zone_picking.py +38 -38
- odoo/addons/shopfloor/static/description/index.html +1 -1
- odoo/addons/shopfloor/tests/__init__.py +1 -0
- odoo/addons/shopfloor/tests/test_zone_picking_require_destination_package.py +62 -0
- odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py +29 -14
- odoo/addons/shopfloor/views/shopfloor_menu.xml +10 -0
- {odoo_addon_shopfloor-16.0.2.4.1.dist-info → odoo_addon_shopfloor-16.0.2.4.2.3.dist-info}/METADATA +2 -2
- {odoo_addon_shopfloor-16.0.2.4.1.dist-info → odoo_addon_shopfloor-16.0.2.4.2.3.dist-info}/RECORD +17 -15
- /odoo/addons/shopfloor/migrations/{16.0.2.2.1 → 16.0.2.4.2}/post-init_search_move_line_options.py +0 -0
- {odoo_addon_shopfloor-16.0.2.4.1.dist-info → odoo_addon_shopfloor-16.0.2.4.2.3.dist-info}/WHEEL +0 -0
- {odoo_addon_shopfloor-16.0.2.4.1.dist-info → odoo_addon_shopfloor-16.0.2.4.2.3.dist-info}/top_level.txt +0 -0
odoo/addons/shopfloor/README.rst
CHANGED
@@ -7,7 +7,7 @@ Shopfloor
|
|
7
7
|
!! This file is generated by oca-gen-addon-readme !!
|
8
8
|
!! changes will be overwritten. !!
|
9
9
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
10
|
-
!! source digest: sha256:
|
10
|
+
!! source digest: sha256:c6a9c49207fab82eb83551dcf62d60b38c4c87c9fdc36d8a3551a922c11acc68
|
11
11
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
12
12
|
|
13
13
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
@@ -23,7 +23,8 @@
|
|
23
23
|
"scan_location_or_pack_first": true,
|
24
24
|
"allow_alternative_destination_package": true,
|
25
25
|
"allow_move_line_search_sort_order": false,
|
26
|
-
"allow_move_line_search_additional_domain": true
|
26
|
+
"allow_move_line_search_additional_domain": true,
|
27
|
+
"require_destination_package": true
|
27
28
|
}
|
28
29
|
</field>
|
29
30
|
</record>
|
@@ -92,6 +92,16 @@ msgstr ""
|
|
92
92
|
msgid "%(qty)s %(product_name)s put in %(package_name)s"
|
93
93
|
msgstr ""
|
94
94
|
|
95
|
+
#. module: shopfloor
|
96
|
+
#. odoo-python
|
97
|
+
#: code:addons/shopfloor/models/shopfloor_menu.py:0
|
98
|
+
#, python-format
|
99
|
+
msgid ""
|
100
|
+
"'No destination package required' is incompatible with 'Pick and pack at the"
|
101
|
+
" same time','Unload package at destination' and 'Multiple moves same "
|
102
|
+
"destination package'."
|
103
|
+
msgstr ""
|
104
|
+
|
95
105
|
#. module: shopfloor
|
96
106
|
#. odoo-python
|
97
107
|
#: code:addons/shopfloor/models/shopfloor_menu.py:0
|
@@ -410,6 +420,11 @@ msgstr ""
|
|
410
420
|
msgid "Destination Package"
|
411
421
|
msgstr ""
|
412
422
|
|
423
|
+
#. module: shopfloor
|
424
|
+
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__require_destination_package
|
425
|
+
msgid "Destination package required"
|
426
|
+
msgstr ""
|
427
|
+
|
413
428
|
#. module: shopfloor
|
414
429
|
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__disable_full_bin_action_is_possible
|
415
430
|
msgid "Disable Full Bin Action Is Possible"
|
@@ -460,6 +475,13 @@ msgstr ""
|
|
460
475
|
msgid "If set, the operations are packed into this package"
|
461
476
|
msgstr ""
|
462
477
|
|
478
|
+
#. module: shopfloor
|
479
|
+
#: model:ir.model.fields,help:shopfloor.field_shopfloor_menu__require_destination_package
|
480
|
+
msgid ""
|
481
|
+
"If set, the user will have to scan only the source location and the "
|
482
|
+
"destination location to process a line. The unload step will be skipped."
|
483
|
+
msgstr ""
|
484
|
+
|
463
485
|
#. module: shopfloor
|
464
486
|
#: model:ir.model.fields,help:shopfloor.field_shopfloor_menu__ignore_no_putaway_available
|
465
487
|
msgid ""
|
@@ -1256,6 +1278,11 @@ msgstr ""
|
|
1256
1278
|
msgid "Remaining raw product not packed, proceed anyway?"
|
1257
1279
|
msgstr ""
|
1258
1280
|
|
1281
|
+
#. module: shopfloor
|
1282
|
+
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__require_destination_package_is_possible
|
1283
|
+
msgid "Require Destination Package Is Possible"
|
1284
|
+
msgstr ""
|
1285
|
+
|
1259
1286
|
#. module: shopfloor
|
1260
1287
|
#: model:ir.model.fields,field_description:shopfloor.field_stock_location__reserved_move_line_ids
|
1261
1288
|
#: model:ir.model.fields,field_description:shopfloor.field_stock_quant_package__reserved_move_line_ids
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Copyright 2024 ACSONE SA/NV
|
2
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
3
|
+
|
4
|
+
import json
|
5
|
+
import logging
|
6
|
+
|
7
|
+
from odoo import SUPERUSER_ID, api
|
8
|
+
|
9
|
+
_logger = logging.getLogger(__name__)
|
10
|
+
|
11
|
+
|
12
|
+
def migrate(cr, version):
|
13
|
+
_logger.info("Updating scenario Zone Picking")
|
14
|
+
if not version:
|
15
|
+
return
|
16
|
+
env = api.Environment(cr, SUPERUSER_ID, {})
|
17
|
+
zone_picking_scenario = env.ref("shopfloor.scenario_zone_picking")
|
18
|
+
_update_scenario_options(zone_picking_scenario)
|
19
|
+
|
20
|
+
|
21
|
+
def _update_scenario_options(scenario):
|
22
|
+
options = scenario.options
|
23
|
+
if "require_destination_package" not in options:
|
24
|
+
options["require_destination_package"] = True
|
25
|
+
options_edit = json.dumps(options or {}, indent=4, sort_keys=True)
|
26
|
+
scenario.write({"options_edit": options_edit})
|
27
|
+
_logger.info(
|
28
|
+
"Option require_destination_package added to scenario Zone Picking"
|
29
|
+
)
|
@@ -228,7 +228,6 @@ class ShopfloorMenu(models.Model):
|
|
228
228
|
allow_alternative_destination_package_is_possible = fields.Boolean(
|
229
229
|
compute="_compute_allow_alternative_destination_package_is_possible"
|
230
230
|
)
|
231
|
-
|
232
231
|
move_line_search_additional_domain_is_possible = fields.Boolean(
|
233
232
|
compute="_compute_move_line_search_additional_domain_is_possible"
|
234
233
|
)
|
@@ -250,6 +249,16 @@ class ShopfloorMenu(models.Model):
|
|
250
249
|
move_line_search_sort_order_custom_code = fields.Text(
|
251
250
|
string="Custom sort key code", help="Python code to sort move lines. "
|
252
251
|
)
|
252
|
+
require_destination_package = fields.Boolean(
|
253
|
+
string="Destination package required",
|
254
|
+
default=True,
|
255
|
+
help="If set, the user will have to scan only the source location "
|
256
|
+
"and the destination location to process a line. The unload step will be skipped.",
|
257
|
+
)
|
258
|
+
|
259
|
+
require_destination_package_is_possible = fields.Boolean(
|
260
|
+
compute="_compute_require_destination_package_is_possible"
|
261
|
+
)
|
253
262
|
|
254
263
|
@api.onchange("unload_package_at_destination")
|
255
264
|
def _onchange_unload_package_at_destination(self):
|
@@ -267,6 +276,16 @@ class ShopfloorMenu(models.Model):
|
|
267
276
|
record.unload_package_at_destination = False
|
268
277
|
record.multiple_move_single_pack = False
|
269
278
|
|
279
|
+
@api.onchange("require_destination_package")
|
280
|
+
def _onchange_require_destination_package(self):
|
281
|
+
# require_destination_package is incompatible with pick_pack_same_time and
|
282
|
+
# unload_package_at_destination and multiple_move_single_pack
|
283
|
+
for record in self:
|
284
|
+
if not record.require_destination_package:
|
285
|
+
record.pick_pack_same_time = False
|
286
|
+
record.unload_package_at_destination = False
|
287
|
+
record.multiple_move_single_pack = False
|
288
|
+
|
270
289
|
@api.onchange("multiple_move_single_pack")
|
271
290
|
def _onchange_multiple_move_single_pack(self):
|
272
291
|
# multiple_move_single_pack is incompatible with pick_pack_same_time,
|
@@ -278,6 +297,7 @@ class ShopfloorMenu(models.Model):
|
|
278
297
|
"unload_package_at_destination",
|
279
298
|
"pick_pack_same_time",
|
280
299
|
"multiple_move_single_pack",
|
300
|
+
"require_destination_package",
|
281
301
|
)
|
282
302
|
def _check_options(self):
|
283
303
|
if self.pick_pack_same_time and self.unload_package_at_destination:
|
@@ -294,6 +314,19 @@ class ShopfloorMenu(models.Model):
|
|
294
314
|
"'Multiple moves same destination package'."
|
295
315
|
)
|
296
316
|
)
|
317
|
+
elif not self.require_destination_package and (
|
318
|
+
self.pick_pack_same_time
|
319
|
+
or self.unload_package_at_destination
|
320
|
+
or self.multiple_move_single_pack
|
321
|
+
):
|
322
|
+
raise exceptions.UserError(
|
323
|
+
_(
|
324
|
+
"'No destination package required' is incompatible with "
|
325
|
+
"'Pick and pack at the same time',"
|
326
|
+
"'Unload package at destination' and 'Multiple moves "
|
327
|
+
"same destination package'."
|
328
|
+
)
|
329
|
+
)
|
297
330
|
|
298
331
|
@api.depends("scenario_id", "picking_type_ids")
|
299
332
|
def _compute_move_create_is_possible(self):
|
@@ -497,6 +530,13 @@ class ShopfloorMenu(models.Model):
|
|
497
530
|
"allow_move_line_search_sort_order"
|
498
531
|
)
|
499
532
|
|
533
|
+
@api.depends("scenario_id")
|
534
|
+
def _compute_require_destination_package_is_possible(self):
|
535
|
+
for menu in self:
|
536
|
+
menu.require_destination_package_is_possible = menu.scenario_id.has_option(
|
537
|
+
"require_destination_package"
|
538
|
+
)
|
539
|
+
|
500
540
|
@api.constrains(
|
501
541
|
"move_line_search_sort_order", "move_line_search_sort_order_custom_code"
|
502
542
|
)
|
@@ -161,6 +161,9 @@ class ZonePicking(Component):
|
|
161
161
|
def _pick_pack_same_time(self):
|
162
162
|
return self.work.menu.pick_pack_same_time
|
163
163
|
|
164
|
+
def _packing_required(self):
|
165
|
+
return self.work.menu.require_destination_package
|
166
|
+
|
164
167
|
def _handle_complete_mix_pack(self, package):
|
165
168
|
packaging = self._actions_for("packaging")
|
166
169
|
return (
|
@@ -924,7 +927,7 @@ class ZonePicking(Component):
|
|
924
927
|
return (location_changed, response)
|
925
928
|
|
926
929
|
# If no destination package
|
927
|
-
if not move_line.result_package_id:
|
930
|
+
if self._packing_required() and not move_line.result_package_id:
|
928
931
|
response = self._response_for_set_line_destination(
|
929
932
|
move_line,
|
930
933
|
message=self.msg_store.dest_package_required(),
|
@@ -1169,43 +1172,40 @@ class ZonePicking(Component):
|
|
1169
1172
|
)
|
1170
1173
|
|
1171
1174
|
extra_message = ""
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
else:
|
1207
|
-
response["message"] = extra_message
|
1208
|
-
return response
|
1175
|
+
location = search.location_from_scan(barcode)
|
1176
|
+
if location:
|
1177
|
+
package = None
|
1178
|
+
if handle_complete_mix_pack:
|
1179
|
+
package = move_line.package_id
|
1180
|
+
if self._pick_pack_same_time():
|
1181
|
+
(
|
1182
|
+
good_for_packing,
|
1183
|
+
message,
|
1184
|
+
) = self._handle_pick_pack_same_time_for_location(move_line)
|
1185
|
+
# TODO: we should append the msg instead.
|
1186
|
+
# To achieve this, we should refactor `response.message` to a list
|
1187
|
+
# or, to no break backward compat, we could add `extra_messages`
|
1188
|
+
# to allow backend to send a main message and N additional messages.
|
1189
|
+
extra_message = message
|
1190
|
+
if not good_for_packing:
|
1191
|
+
return self._response_for_set_line_destination(
|
1192
|
+
move_line, message=message, qty_done=quantity
|
1193
|
+
)
|
1194
|
+
pkg_moved, response = self._set_destination_location(
|
1195
|
+
move_line,
|
1196
|
+
package,
|
1197
|
+
quantity,
|
1198
|
+
confirmation,
|
1199
|
+
location,
|
1200
|
+
barcode,
|
1201
|
+
)
|
1202
|
+
if response:
|
1203
|
+
if extra_message:
|
1204
|
+
if response.get("message"):
|
1205
|
+
response["message"]["body"] += "\n" + extra_message["body"]
|
1206
|
+
else:
|
1207
|
+
response["message"] = extra_message
|
1208
|
+
return response
|
1209
1209
|
|
1210
1210
|
# When the barcode is a package
|
1211
1211
|
package = search.package_from_scan(barcode)
|
@@ -367,7 +367,7 @@ ul.auto-toc {
|
|
367
367
|
!! This file is generated by oca-gen-addon-readme !!
|
368
368
|
!! changes will be overwritten. !!
|
369
369
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
370
|
-
!! source digest: sha256:
|
370
|
+
!! source digest: sha256:c6a9c49207fab82eb83551dcf62d60b38c4c87c9fdc36d8a3551a922c11acc68
|
371
371
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
372
372
|
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/wms/tree/16.0/shopfloor"><img alt="OCA/wms" src="https://img.shields.io/badge/github-OCA%2Fwms-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/wms-16-0/wms-16-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/wms&target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
373
373
|
<p>Shopfloor is a barcode scanner application for internal warehouse operations.</p>
|
@@ -79,6 +79,7 @@ from . import test_zone_picking_unload_buffer_lines
|
|
79
79
|
from . import test_zone_picking_unload_single
|
80
80
|
from . import test_zone_picking_unload_all
|
81
81
|
from . import test_zone_picking_unload_set_destination
|
82
|
+
from . import test_zone_picking_require_destination_package
|
82
83
|
from . import test_misc
|
83
84
|
from . import test_move_action_assign
|
84
85
|
from . import test_scan_anything
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Copyright 2020 Camptocamp SA (http://www.camptocamp.com)
|
2
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
3
|
+
from .test_zone_picking_base import ZonePickingCommonCase
|
4
|
+
|
5
|
+
# pylint: disable=missing-return
|
6
|
+
|
7
|
+
|
8
|
+
class ZonePickingNoPAcking(ZonePickingCommonCase):
|
9
|
+
"""Tests zone picking without packing steps.
|
10
|
+
|
11
|
+
* /set_destination
|
12
|
+
|
13
|
+
"""
|
14
|
+
|
15
|
+
def setUp(self):
|
16
|
+
super().setUp()
|
17
|
+
self.service.work.current_picking_type = self.picking1.picking_type_id
|
18
|
+
self.picking1.move_line_ids.result_package_id = False
|
19
|
+
|
20
|
+
def test_set_destination(self):
|
21
|
+
# when no packing is set, you can set the destination directly
|
22
|
+
# without the need to pack the product
|
23
|
+
self.service.work.menu.sudo().require_destination_package = True
|
24
|
+
zone_location = self.zone_location
|
25
|
+
picking_type = self.picking1.picking_type_id
|
26
|
+
move_line = self.picking1.move_line_ids[0]
|
27
|
+
response = self.service.dispatch(
|
28
|
+
"set_destination",
|
29
|
+
params={
|
30
|
+
"move_line_id": move_line.id,
|
31
|
+
"barcode": move_line.location_dest_id.barcode,
|
32
|
+
"quantity": move_line.reserved_uom_qty,
|
33
|
+
"confirmation": None,
|
34
|
+
},
|
35
|
+
)
|
36
|
+
self.assert_response_set_line_destination(
|
37
|
+
response,
|
38
|
+
zone_location,
|
39
|
+
picking_type,
|
40
|
+
move_line,
|
41
|
+
qty_done=move_line.reserved_uom_qty,
|
42
|
+
message=self.service.msg_store.dest_package_required(),
|
43
|
+
)
|
44
|
+
self.service.work.menu.sudo().require_destination_package = False
|
45
|
+
response = self.service.dispatch(
|
46
|
+
"set_destination",
|
47
|
+
params={
|
48
|
+
"move_line_id": move_line.id,
|
49
|
+
"barcode": move_line.location_dest_id.barcode,
|
50
|
+
"quantity": move_line.reserved_uom_qty,
|
51
|
+
"confirmation": None,
|
52
|
+
},
|
53
|
+
)
|
54
|
+
move_lines = self.service._find_location_move_lines()
|
55
|
+
move_lines = move_lines.sorted(lambda l: l.move_id.priority, reverse=True)
|
56
|
+
self.assert_response_select_line(
|
57
|
+
response,
|
58
|
+
zone_location,
|
59
|
+
picking_type,
|
60
|
+
move_lines,
|
61
|
+
message=self.service.msg_store.confirm_pack_moved(),
|
62
|
+
)
|
@@ -187,15 +187,15 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
187
187
|
move qty 10 (assigned):
|
188
188
|
-> move_line qty 10 from location X
|
189
189
|
|
190
|
-
Then the operator move 6 qty on 10
|
191
|
-
|
192
|
-
|
193
|
-
and only a package barcode is allowed on scan.
|
190
|
+
Then the operator move 6 qty on 10:
|
191
|
+
-> move_line qty 6 from location X (done)
|
192
|
+
-> move_line qty 4 from location X (assigned)
|
194
193
|
"""
|
195
194
|
zone_location = self.zone_location
|
196
195
|
picking_type = self.picking3.picking_type_id
|
197
196
|
barcode = self.packing_location.barcode
|
198
197
|
moves_before = self.picking3.move_ids
|
198
|
+
self.assertEqual(moves_before.product_uom_qty, 10)
|
199
199
|
self.assertEqual(len(moves_before), 1)
|
200
200
|
self.assertEqual(len(moves_before.move_line_ids), 1)
|
201
201
|
move_line = moves_before.move_line_ids
|
@@ -210,14 +210,21 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
210
210
|
"confirmation": None,
|
211
211
|
},
|
212
212
|
)
|
213
|
-
self.
|
213
|
+
move_lines = self.service._find_location_move_lines()
|
214
|
+
move_lines = move_lines.sorted(lambda l: l.move_id.priority, reverse=True)
|
215
|
+
self.assert_response_select_line(
|
214
216
|
response,
|
215
217
|
zone_location,
|
216
218
|
picking_type,
|
217
|
-
|
218
|
-
|
219
|
-
message=self.service.msg_store.package_not_found_for_barcode(barcode),
|
219
|
+
move_lines,
|
220
|
+
message=self.service.msg_store.confirm_pack_moved(),
|
220
221
|
)
|
222
|
+
done_move = move_line.move_id
|
223
|
+
assigned_move = moves_before
|
224
|
+
self.assertEqual(done_move.state, "done")
|
225
|
+
self.assertEqual(done_move.product_uom_qty, 6)
|
226
|
+
self.assertEqual(assigned_move.state, "assigned")
|
227
|
+
self.assertEqual(assigned_move.product_uom_qty, 4)
|
221
228
|
|
222
229
|
def test_set_destination_location_several_move_line_full_qty(self):
|
223
230
|
"""Scanned barcode is the destination location.
|
@@ -297,8 +304,8 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
297
304
|
|
298
305
|
Then the operator move 4 qty on 6 (from the first move line), we get:
|
299
306
|
|
300
|
-
|
301
|
-
|
307
|
+
-> move_line qty 6 from location X (assigned)
|
308
|
+
-> move_line qty 4 from location Y (done)
|
302
309
|
"""
|
303
310
|
zone_location = self.zone_location
|
304
311
|
picking_type = self.picking4.picking_type_id
|
@@ -318,14 +325,22 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
|
|
318
325
|
"confirmation": None,
|
319
326
|
},
|
320
327
|
)
|
321
|
-
|
328
|
+
# Check response
|
329
|
+
move_lines = self.service._find_location_move_lines()
|
330
|
+
move_lines = move_lines.sorted(lambda l: l.move_id.priority, reverse=True)
|
331
|
+
self.assert_response_select_line(
|
322
332
|
response,
|
323
333
|
zone_location,
|
324
334
|
picking_type,
|
325
|
-
|
326
|
-
|
327
|
-
message=self.service.msg_store.package_not_found_for_barcode(barcode),
|
335
|
+
move_lines,
|
336
|
+
message=self.service.msg_store.confirm_pack_moved(),
|
328
337
|
)
|
338
|
+
done_move = move_line.move_id
|
339
|
+
assigned_move = moves_before
|
340
|
+
self.assertEqual(done_move.state, "done")
|
341
|
+
self.assertEqual(done_move.product_uom_qty, 4)
|
342
|
+
self.assertEqual(assigned_move.state, "assigned")
|
343
|
+
self.assertEqual(assigned_move.product_uom_qty, 6)
|
329
344
|
|
330
345
|
def test_set_destination_location_zero_check(self):
|
331
346
|
"""Scanned barcode is the destination location.
|
@@ -32,6 +32,16 @@
|
|
32
32
|
>
|
33
33
|
<field name="ignore_no_putaway_available_is_possible" invisible="1" />
|
34
34
|
<field name="ignore_no_putaway_available" />
|
35
|
+
</group>
|
36
|
+
<group
|
37
|
+
name="require_destination_package"
|
38
|
+
attrs="{'invisible': [('require_destination_package_is_possible', '=', False)]}"
|
39
|
+
>
|
40
|
+
<field
|
41
|
+
name="require_destination_package_is_possible"
|
42
|
+
invisible="1"
|
43
|
+
/>
|
44
|
+
<field name="require_destination_package" />
|
35
45
|
</group>
|
36
46
|
<group
|
37
47
|
name="pick_pack_same_time"
|
{odoo_addon_shopfloor-16.0.2.4.1.dist-info → odoo_addon_shopfloor-16.0.2.4.2.3.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: odoo-addon-shopfloor
|
3
|
-
Version: 16.0.2.4.
|
3
|
+
Version: 16.0.2.4.2.3
|
4
4
|
Summary: manage warehouse operations with barcode scanners
|
5
5
|
Home-page: https://github.com/OCA/wms
|
6
6
|
Author: Camptocamp, BCIM, Akretion, Odoo Community Association (OCA)
|
@@ -36,7 +36,7 @@ Shopfloor
|
|
36
36
|
!! This file is generated by oca-gen-addon-readme !!
|
37
37
|
!! changes will be overwritten. !!
|
38
38
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
39
|
-
!! source digest: sha256:
|
39
|
+
!! source digest: sha256:c6a9c49207fab82eb83551dcf62d60b38c4c87c9fdc36d8a3551a922c11acc68
|
40
40
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
41
41
|
|
42
42
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
{odoo_addon_shopfloor-16.0.2.4.1.dist-info → odoo_addon_shopfloor-16.0.2.4.2.3.dist-info}/RECORD
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
odoo/addons/shopfloor/README.rst,sha256=
|
1
|
+
odoo/addons/shopfloor/README.rst,sha256=apHyGNWi90vP04Nf4HZN-ojKsIEKlM-RKq09f9Rvumg,5318
|
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=_J2FGeuizlMP2K_xkRkt0HxbSHq--02ZwV89-LOQR4c,2245
|
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
|
@@ -25,7 +25,7 @@ odoo/addons/shopfloor/components/scan_handler_lot.py,sha256=adzigHMfdqrK2P286OzA
|
|
25
25
|
odoo/addons/shopfloor/components/scan_handler_package.py,sha256=INbzbxzg07F4vW8DM_mjtf2dkRN1pbiBuo_xjsId9yk,829
|
26
26
|
odoo/addons/shopfloor/components/scan_handler_product.py,sha256=M0GrdwBDm8Srbe2CwYxldGHiqoDBeZNUr8VP9F5vgtI,925
|
27
27
|
odoo/addons/shopfloor/components/scan_handler_transfer.py,sha256=uHtI-3T4g6ZEpoJJQYZhbJQo3bTXTnGnEs4lC0iluKc,820
|
28
|
-
odoo/addons/shopfloor/data/shopfloor_scenario_data.xml,sha256=
|
28
|
+
odoo/addons/shopfloor/data/shopfloor_scenario_data.xml,sha256=mu_SzbVuKWdg39c7BOzJH1GtuDPEy9-6Xe0dZYOKONg,2643
|
29
29
|
odoo/addons/shopfloor/demo/shopfloor_app_demo.xml,sha256=tqAzRijIm0KCfyIuaKH8wYIUDJR_uNQ_i4HLX5wPSgY,420
|
30
30
|
odoo/addons/shopfloor/demo/shopfloor_menu_demo.xml,sha256=5vvD0UDNwGcH6d3cTuAnOApCB8VlErOKtnfy8_n2yWw,2938
|
31
31
|
odoo/addons/shopfloor/demo/shopfloor_profile_demo.xml,sha256=pcz9A6s2-HVtur8_GZXoiAnVvlCZzlLXSNyQ53KEDlM,253
|
@@ -48,13 +48,14 @@ odoo/addons/shopfloor/i18n/de.po,sha256=vsQ8YvfoWs3UGAvIY_hLj6joN7KkkDR7qlR_p6O5
|
|
48
48
|
odoo/addons/shopfloor/i18n/es_AR.po,sha256=OWD4O8FSjZtMDCRGLmxQKWYKNYwIYrkba31QxoUzObw,80075
|
49
49
|
odoo/addons/shopfloor/i18n/it.po,sha256=sAZ9WKWhoO3G6OP9XWvmAqMGRZ2-y5KZDEBS3ijXMWg,80627
|
50
50
|
odoo/addons/shopfloor/i18n/pt_BR.po,sha256=Gvt3Lf9VE1FLkVgqtZeMzLdQ5nWxaemsjIMGNKvylNc,57637
|
51
|
-
odoo/addons/shopfloor/i18n/shopfloor.pot,sha256=
|
51
|
+
odoo/addons/shopfloor/i18n/shopfloor.pot,sha256=SsKQTDcr3JB3dpbVprK2ks2opeQ4coi6eNkQaltVfoM,58571
|
52
52
|
odoo/addons/shopfloor/migrations/16.0.2.0.0/post-migration.py,sha256=WfXnS5fj_K78VFaUAe0UiNhFX1C8LA0lkh6Zofllvc4,1311
|
53
|
-
odoo/addons/shopfloor/migrations/16.0.2.2
|
53
|
+
odoo/addons/shopfloor/migrations/16.0.2.4.2/post-init_search_move_line_options.py,sha256=OfsDBUUEKtWQOv9pU86edeFlnT2YiPli4PMpv74Q8IY,1176
|
54
|
+
odoo/addons/shopfloor/migrations/16.0.2.4.2/post-migration.py,sha256=wU-NTy1RLF6iSndiH6jzzIHIlPfX1DBUeB94QpB7TU4,909
|
54
55
|
odoo/addons/shopfloor/models/__init__.py,sha256=hQY6dfl-ATXYffWa6cRlVQbyZ2BYc3voUNiNSC32miA,368
|
55
56
|
odoo/addons/shopfloor/models/priority_postpone_mixin.py,sha256=AEu_K9mul_SmjyLK8NLCycRn3BLzirUqNOaf0RVYEpE,1503
|
56
57
|
odoo/addons/shopfloor/models/shopfloor_app.py,sha256=ZfVahQYm0jzyeH7EtlOOhxYUif9OwcHIsyZAbQxEeXA,292
|
57
|
-
odoo/addons/shopfloor/models/shopfloor_menu.py,sha256=
|
58
|
+
odoo/addons/shopfloor/models/shopfloor_menu.py,sha256=aq1vWgcN2lihdnUkDtTz5k_zUJJKOx_z_ggT_-6inrU,23161
|
58
59
|
odoo/addons/shopfloor/models/stock_location.py,sha256=wrLZ_-yjLB-1zWevWtqNdk8WMdyKJcpnzuNGyQOKL70,3098
|
59
60
|
odoo/addons/shopfloor/models/stock_move.py,sha256=1G_HyWY6xHwybBbR92IKS1euqnUHeMP91VOCdoE-asI,4940
|
60
61
|
odoo/addons/shopfloor/models/stock_move_line.py,sha256=uYZJZdhf-X1HHHRYfWf_oygkDNrzNgP0TIG5TXJxSAY,13360
|
@@ -80,12 +81,12 @@ odoo/addons/shopfloor/services/menu.py,sha256=m1eNOReTda_xD-p-m8k2Pn5cJQOLWTiaBG
|
|
80
81
|
odoo/addons/shopfloor/services/picking_batch.py,sha256=w51R5HHkQxCHle72k28VetXKfIRRh5GTaEXv6mhikvQ,4649
|
81
82
|
odoo/addons/shopfloor/services/service.py,sha256=HuxZZQ5MxnvDtr89HWQW2muuPvEF4vjI9ArdSFeAxg8,4882
|
82
83
|
odoo/addons/shopfloor/services/single_pack_transfer.py,sha256=S9zZ027fclqUBvqqFHMnD1QcbUb_dYyCtWs1E4pOAV4,16120
|
83
|
-
odoo/addons/shopfloor/services/zone_picking.py,sha256=
|
84
|
+
odoo/addons/shopfloor/services/zone_picking.py,sha256=9JMZNhSiwkw1DWIrBj1dquM-i1NaMzDdqbI_wuTgRjw,83806
|
84
85
|
odoo/addons/shopfloor/services/forms/__init__.py,sha256=nxwJdKX47hb56ERf4Qb3UE5dkdsHCbkaXMAXs4XMAd8,27
|
85
86
|
odoo/addons/shopfloor/services/forms/picking_form.py,sha256=F15G5yw78Pd1WgPjMz00-K1JyGaTdfdvVYzG4Dubpqk,2626
|
86
87
|
odoo/addons/shopfloor/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
|
87
|
-
odoo/addons/shopfloor/static/description/index.html,sha256=
|
88
|
-
odoo/addons/shopfloor/tests/__init__.py,sha256=
|
88
|
+
odoo/addons/shopfloor/static/description/index.html,sha256=lh9hf3eFsYSHQX2psVp12KI0PY9Sn3C6PAn9194sMyw,17547
|
89
|
+
odoo/addons/shopfloor/tests/__init__.py,sha256=4WHuLVjOX_lndDJyuyGcreNckArFJL2HA5PPFlhT6FM,3962
|
89
90
|
odoo/addons/shopfloor/tests/common.py,sha256=v1C7DQT-MvTk81xIYyv--c1BaIpwbia2ey8s35nvrK4,11611
|
90
91
|
odoo/addons/shopfloor/tests/models.py,sha256=jNbYUqYLxkbQMn4j8bejHM3l6CRThJBDfpATl8H83OM,939
|
91
92
|
odoo/addons/shopfloor/tests/test_actions_change_package_lot.py,sha256=iWtTEbIKKrwqvoCUyfuaq1jAtnrW3DP8BQ1xEdZk9t4,46829
|
@@ -165,12 +166,13 @@ odoo/addons/shopfloor/tests/test_user.py,sha256=tpjFFS1lJ4VwT8fwfz2GseXJy-JhAWC6
|
|
165
166
|
odoo/addons/shopfloor/tests/test_zone_picking_base.py,sha256=UIAZIVHaEukamc0pOYLA96Bx06MYBftPJfAeUjOrYtg,20132
|
166
167
|
odoo/addons/shopfloor/tests/test_zone_picking_change_pack_lot.py,sha256=BxDjl_WGe_39SpLX0r1yKRf2h_nxzgjkmsSLUpWI61E,5430
|
167
168
|
odoo/addons/shopfloor/tests/test_zone_picking_complete_mix_pack_flux.py,sha256=7_cEh83MNM3Z39X_R6mZ9bgK-V9HsgT1O2nEnxb3PFU,2325
|
169
|
+
odoo/addons/shopfloor/tests/test_zone_picking_require_destination_package.py,sha256=T-BfyNsECfSMAAd_xvz4niCj9zZJLvFgBSAe7dGy1VI,2272
|
168
170
|
odoo/addons/shopfloor/tests/test_zone_picking_select_line.py,sha256=ESRaPUL7JX2dXq8TC5teAWu8B6Le-FAYBEWUFtdg1dQ,29974
|
169
171
|
odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py,sha256=uXDRd70zWRy08SinTULIzTJHEmC9u7FpVqOStuigElc,8464
|
170
172
|
odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py.bak,sha256=-TMgeipU2ROoSuyjLPMEMhK5EijwqJm0qS0xixK6TAE,7937
|
171
173
|
odoo/addons/shopfloor/tests/test_zone_picking_select_line_no_prefill_qty.py,sha256=ie3T_MXmxLVQIIeuVR-7w3sr_hCPbDIKHEaSvcxeICs,4360
|
172
174
|
odoo/addons/shopfloor/tests/test_zone_picking_select_picking_type.py,sha256=kuuPjKvpBRrj36z-lj4P7NMLqszkZasIdpvx9mayUQI,870
|
173
|
-
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py,sha256=
|
175
|
+
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py,sha256=ISueF4PKvYHD4o79X4hydnQYRdT-LnmYMsyZxDfX3u0,27780
|
174
176
|
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_no_prefill_qty.py,sha256=1uHVRGMcxbdjEBiHjtCcQIQpt_e6XKZP35ogisNqctU,5238
|
175
177
|
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_package_not_allowed.py,sha256=Vwg4Wv6psiAr2MB3p799gvm0dtu-vM5ncvFIlA6h-q4,3685
|
176
178
|
odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_pick_pack.py,sha256=QsVxZsGrBEixsdAfjG5N813pCDF_7LDc9ydoFrj2ybs,8952
|
@@ -181,11 +183,11 @@ odoo/addons/shopfloor/tests/test_zone_picking_unload_buffer_lines.py,sha256=BwQZ
|
|
181
183
|
odoo/addons/shopfloor/tests/test_zone_picking_unload_set_destination.py,sha256=TdtQf5v1IV_40lRxhwsFZsxVYiTgVVwq5sbyPnZBuIA,13681
|
182
184
|
odoo/addons/shopfloor/tests/test_zone_picking_unload_single.py,sha256=MNqL2YEsG7sU768sYDUh15wDpz3xx1bKy6J_28oVUaQ,4409
|
183
185
|
odoo/addons/shopfloor/tests/test_zone_picking_zero_check.py,sha256=HB0hrvRsH7Ucv1pQm-D8dMWq6tQuTbrI8CPFqZh0Zb0,1376
|
184
|
-
odoo/addons/shopfloor/views/shopfloor_menu.xml,sha256=
|
186
|
+
odoo/addons/shopfloor/views/shopfloor_menu.xml,sha256=gepRIcpP6xuYypagEfpJm1s9-AFu5AxN1n60z1_MTm8,12503
|
185
187
|
odoo/addons/shopfloor/views/stock_location.xml,sha256=d7iqbOQZbb5YPSdAXlQ6spcj8dUvQ37DpEGuaLX5B1M,829
|
186
188
|
odoo/addons/shopfloor/views/stock_move_line.xml,sha256=tn3pV67aRoYmn3qkm3aSgdYArY-z9SIrl_4fpJFy3Jo,1984
|
187
189
|
odoo/addons/shopfloor/views/stock_picking_type.xml,sha256=Ckn2835hO4HtuZQX9x3382C4gs789fb94Cx0444mBkc,800
|
188
|
-
odoo_addon_shopfloor-16.0.2.4.
|
189
|
-
odoo_addon_shopfloor-16.0.2.4.
|
190
|
-
odoo_addon_shopfloor-16.0.2.4.
|
191
|
-
odoo_addon_shopfloor-16.0.2.4.
|
190
|
+
odoo_addon_shopfloor-16.0.2.4.2.3.dist-info/METADATA,sha256=DEMG0FCH_XmTIj_gGVRpLb6K6pxAIVTnmuH0lt7QL9M,6763
|
191
|
+
odoo_addon_shopfloor-16.0.2.4.2.3.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
192
|
+
odoo_addon_shopfloor-16.0.2.4.2.3.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
|
193
|
+
odoo_addon_shopfloor-16.0.2.4.2.3.dist-info/RECORD,,
|
/odoo/addons/shopfloor/migrations/{16.0.2.2.1 → 16.0.2.4.2}/post-init_search_move_line_options.py
RENAMED
File without changes
|
{odoo_addon_shopfloor-16.0.2.4.1.dist-info → odoo_addon_shopfloor-16.0.2.4.2.3.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|