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.
@@ -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:ca663ff537b2eaf21df81aa7021efde06ad30709b48148d8fc5dbf570b0b5f87
10
+ !! source digest: sha256:c6a9c49207fab82eb83551dcf62d60b38c4c87c9fdc36d8a3551a922c11acc68
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |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": "16.0.2.4.1",
9
+ "version": "16.0.2.4.2",
10
10
  "development_status": "Beta",
11
11
  "category": "Inventory",
12
12
  "website": "https://github.com/OCA/wms",
@@ -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
- if moving_full_quantity:
1173
- # When the barcode is a location,
1174
- # only allow it if moving the full qty.
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
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:ca663ff537b2eaf21df81aa7021efde06ad30709b48148d8fc5dbf570b0b5f87
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&amp;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, we get:
191
-
192
- an error because we can move only full qty by location
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.assert_response_set_line_destination(
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
- move_line,
218
- qty_done=6,
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
- an error because we can move only full qty by location
301
- and only a package barcode is allowed on scan.
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
- self.assert_response_set_line_destination(
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
- move_line,
326
- qty_done=4,
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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-shopfloor
3
- Version: 16.0.2.4.1
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:ca663ff537b2eaf21df81aa7021efde06ad30709b48148d8fc5dbf570b0b5f87
39
+ !! source digest: sha256:c6a9c49207fab82eb83551dcf62d60b38c4c87c9fdc36d8a3551a922c11acc68
40
40
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
41
41
 
42
42
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -1,6 +1,6 @@
1
- odoo/addons/shopfloor/README.rst,sha256=1xelEVfyzRYrmYutFWFc70_dp6LFor-n2-eIU2jZNqw,5318
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=DQU3Eg_uSe6mpoL7_dC4yc2swi6YcVTQbViMbraZVaQ,2245
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=VXuWnIsBJh4FgQcD0CoMFUi32rra8A4Qi5NHNfz6UVA,2602
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=5JKZf-V6X6R7vTdOEHkX0xYuYneyzf_GbSzK7dL96DU,57627
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.1/post-init_search_move_line_options.py,sha256=OfsDBUUEKtWQOv9pU86edeFlnT2YiPli4PMpv74Q8IY,1176
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=glADVnoHw-YKFAe74uKedMH5zVIlaWDtwdtnl0Wkl8E,21366
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=H6cA3NAHhxq3uUuwsCjep723fUHkxEJJgMD9duV6nek,83952
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=eQGIfDi_C6Uf9Sm-3qgyN-96CTpuIE1vqSiMl7K1SQU,17547
88
- odoo/addons/shopfloor/tests/__init__.py,sha256=G9IP98Vs4Vx26FYbaxQcJST7xU7gjUggxTEiy8DPCMI,3902
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=QlPsMcTCvT4ffe0-Gt2M9qV4ij5JnHy9ziEes2UB8Xs,26949
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=zAKIIMnglUsRnfvusKjKsRaZdQVahFZ2Ob4fFZZGsd0,12059
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.1.dist-info/METADATA,sha256=H2VBnb2JF8amTaF1BSE1ecqzCzf_GwZ5CNh0gRukDXI,6761
189
- odoo_addon_shopfloor-16.0.2.4.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
190
- odoo_addon_shopfloor-16.0.2.4.1.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
191
- odoo_addon_shopfloor-16.0.2.4.1.dist-info/RECORD,,
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,,