odoo-addon-shopfloor 18.0.0.2.0__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.
@@ -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:534d443b8feb0fd2548ede9663e260ceb8dcfb20686a39d06022ee92bcc6d209
14
+ !! source digest: sha256:039c0e1f10bbf63b4fd82fea958772168aea3e98a4fb38955960a74f946bd07d
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.2.0",
9
+ "version": "18.0.0.3.0",
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.with_context(bypass_reservation_update=True).quantity = self.qty_picked
57
+ self.quantity = self.qty_picked
58
58
  return new_line
59
59
  return self.browse()
60
60
 
@@ -451,7 +451,8 @@ 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
- ("qty_done", ">", 0),
454
+ ("qty_picked", ">", 0),
455
+ ("picked", "=", True),
455
456
  ("state", "not in", ("cancel", "done")),
456
457
  ("result_package_id", "!=", False),
457
458
  ("shopfloor_user_id", "=", self.env.user.id),
@@ -686,6 +687,9 @@ class ZonePicking(Component):
686
687
  response_error_func=self._response_for_change_pack_lot,
687
688
  )
688
689
  else:
690
+ # FIXME: this case shouldn't be possible anymore
691
+ # because a check on stock.quant.package.write in odoo core
692
+ # prevents to update a location on a package w/o move lines.
689
693
  response = self._list_move_lines(sublocation or self.zone_location)
690
694
  message = self.msg_store.package_has_no_product_to_take(barcode)
691
695
  return response, message
@@ -953,7 +957,7 @@ class ZonePicking(Component):
953
957
  for _move_line in package.move_line_ids:
954
958
  if _move_line.state not in ("assigned", "partially_available"):
955
959
  continue
956
- _move_line.qty_done = move_line.quantity
960
+ _move_line.qty_picked = move_line.quantity
957
961
  move_lines |= _move_line
958
962
  self._write_destination_on_lines(move_lines, location)
959
963
 
@@ -976,8 +980,7 @@ class ZonePicking(Component):
976
980
  # Zero check
977
981
  # Only apply zero check if the product is of type "product".
978
982
  zero_check = (
979
- move_line.product_id.type == "product"
980
- and self.picking_type.shopfloor_zero_check
983
+ move_line.product_id.is_storable and self.picking_type.shopfloor_zero_check
981
984
  )
982
985
  if zero_check and move_line.location_id.planned_qty_in_location_is_empty():
983
986
  response = self._response_for_zero_check(move_line)
@@ -1059,8 +1062,7 @@ class ZonePicking(Component):
1059
1062
  # Zero check
1060
1063
  # Only apply zero check if the product is of type "product".
1061
1064
  zero_check = (
1062
- move_line.product_id.type == "product"
1063
- and self.picking_type.shopfloor_zero_check
1065
+ move_line.product_id.is_storable and self.picking_type.shopfloor_zero_check
1064
1066
  )
1065
1067
  if zero_check and move_line.location_id.planned_qty_in_location_is_empty():
1066
1068
  response = self._response_for_zero_check(move_line)
@@ -1350,7 +1352,7 @@ class ZonePicking(Component):
1350
1352
  ("package_id", "=", package.id),
1351
1353
  ("lot_id", "=", lot.id),
1352
1354
  ("state", "not in", ("cancel", "done")),
1353
- ("qty_done", "=", 0),
1355
+ ("qty_picked", "=", 0),
1354
1356
  ]
1355
1357
  return domain
1356
1358
 
@@ -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:534d443b8feb0fd2548ede9663e260ceb8dcfb20686a39d06022ee92bcc6d209
375
+ !! source digest: sha256:039c0e1f10bbf63b4fd82fea958772168aea3e98a4fb38955960a74f946bd07d
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&amp;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,25 @@ 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
- # 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
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
+
79
80
  # 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
81
+ from . import test_zone_picking_unload_buffer_lines
82
+ from . import test_zone_picking_unload_single
83
+ from . import test_zone_picking_unload_all
84
+ from . import test_zone_picking_unload_set_destination
85
+ from . import test_zone_picking_require_destination_package
85
86
  from . import test_misc
86
87
  from . import test_move_action_assign
87
88
  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.qty_done = move_line.quantity
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
- def test_scan_source_barcode_package_not_found(self):
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.qty_done, 10)
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.move_id.move_line_ids.quantity, 0)
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(move_line.qty_done, 6)
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
- "qty_done": 10,
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
- "qty_done": 6,
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
- "qty_done": 0,
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.qty_done
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.qty_done, previous_qty_done)
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
- "qty_done": 10,
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.qty_done, 6)
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.qty_done, 3)
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
- {"qty_done": 0, "shopfloor_user_id": False, "result_package_id": False}
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",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-shopfloor
3
- Version: 18.0.0.2.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:534d443b8feb0fd2548ede9663e260ceb8dcfb20686a39d06022ee92bcc6d209
45
+ !! source digest: sha256:039c0e1f10bbf63b4fd82fea958772168aea3e98a4fb38955960a74f946bd07d
46
46
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
47
47
 
48
48
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -1,6 +1,6 @@
1
- odoo/addons/shopfloor/README.rst,sha256=ddlcEANyrXuw_0BJa_oqkjx_t1XkAxx--bSmHZSc0CA,6138
1
+ odoo/addons/shopfloor/README.rst,sha256=m8vIlcHRrF8Fb_jQJsZh8aDsnuUxYI-qQjfMNOriIOI,6138
2
2
  odoo/addons/shopfloor/__init__.py,sha256=ke3RmZ7XkX-lz4S8NHAxNIEJ5_Nvj5bjBAqD-W-q73c,91
3
- odoo/addons/shopfloor/__manifest__.py,sha256=y-Dk55JiLnF_d15DTJVCwVuFzLehN6wissqRRoZ-Nj8,2572
3
+ odoo/addons/shopfloor/__manifest__.py,sha256=LCkjhRYGu67m9yF2deaYhS1ukqsLuhMlI8iz2Su7Yos,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
@@ -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=cPHXbogSd-H8G5jtKSO6a-l79QM6167A324iPQR_II0,11508
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=DK6KjDIYG9PpO2s-2VoqJY055HUzmzSLVGt7q2oUkI4,83978
81
+ odoo/addons/shopfloor/services/zone_picking.py,sha256=EaVJ9zs2GhxSrpHCy9EIY_BCMu4V2O3L5-GTfy6dNYQ,84189
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=KCn-2Vii2QXZBYP-gcQE0GWFXyFS1wJ4055e0IppcVQ,18540
86
- odoo/addons/shopfloor/tests/__init__.py,sha256=Gh1JDevZQ10f2B24wdJumgf7jQXjkJX2egy0Hpvw5TU,4048
85
+ odoo/addons/shopfloor/static/description/index.html,sha256=uxww0m9eFGsRT8DpqfXChmDoQgIRCtumA3V6XILL2fo,18540
86
+ odoo/addons/shopfloor/tests/__init__.py,sha256=Ku5R_NEJ7xD94G9Hcw4xBmkwyFA9aqcVfpli5PNfkho,4015
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=f8uGGF1LdJqoZmyjCtnrnA6EF5nPe7VTHzXzXL818HY,29956
167
+ odoo/addons/shopfloor/tests/test_zone_picking_select_line.py,sha256=W8mVKBK5K8rA3szolkXJMeD7BLb7NxEJ_snnYJWwZJg,30144
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=xDq0PqS7LNmnLAKgqEFX2rDgzeZ2X-tFVG794ibZHd4,27616
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=6lWsIbgb-r5WlLouqm3-yM6Y1gGpP0PwyJ72mYVv5m0,8940
174
+ odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_pick_pack.py,sha256=Awd6smTthYGqgorgpJK4J24R66ypSjv8iPy9nINJVxc,9002
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=eBwooLbaSHG9mobu-JCz8jRhWLyEmmbmO0uvoSqQ4rU,13053
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=c2B7ourPkZ6jPPt6FhIskiQlF2ea4VfTOy31D_VUkrE,4385
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.2.0.dist-info/METADATA,sha256=oAo2HqrE7jyG6FR8OCdUibrduPDFGtmk4HlV8xV8GYk,7580
188
- odoo_addon_shopfloor-18.0.0.2.0.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
189
- odoo_addon_shopfloor-18.0.0.2.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
190
- odoo_addon_shopfloor-18.0.0.2.0.dist-info/RECORD,,
186
+ odoo_addon_shopfloor-18.0.0.3.0.dist-info/METADATA,sha256=3ezSzJZ7HpndpXC47zPxsQwKr4PzS5h6u-PT312tC4Q,7580
187
+ odoo_addon_shopfloor-18.0.0.3.0.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
188
+ odoo_addon_shopfloor-18.0.0.3.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
189
+ odoo_addon_shopfloor-18.0.0.3.0.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
- # )