odoo-addon-shopfloor 18.0.0.2.0__py3-none-any.whl → 18.0.0.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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:ba88a2ff0fc8dc7ea2a811a9507ddb4144cef230f98b4cbb1a6b506edefe389f
15
15
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
16
 
17
17
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -6,7 +6,7 @@
6
6
  {
7
7
  "name": "Shopfloor",
8
8
  "summary": "manage warehouse operations with barcode scanners",
9
- "version": "18.0.0.2.0",
9
+ "version": "18.0.0.3.1",
10
10
  "development_status": "Beta",
11
11
  "category": "Inventory",
12
12
  "website": "https://github.com/OCA/stock-logistics-shopfloor",
@@ -149,7 +149,9 @@ class SearchAction(Component):
149
149
  if not barcode:
150
150
  return model.browse()
151
151
  domain = [
152
+ "|",
152
153
  ("company_id", "=", self.env.company.id),
154
+ ("company_id", "=", False),
153
155
  ("name", "=", barcode),
154
156
  ]
155
157
  if products:
@@ -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
 
@@ -63,7 +63,7 @@ class ZonePicking(Component):
63
63
  * they scan a location, in which case the move line's destination is
64
64
  updated with it and the move is done
65
65
  * they scan a package, which becomes the destination package of the move
66
- line, the move line is not set to done, its ``qty_done`` is updated
66
+ line, the move line is not set to done, its ``qty_picked`` is updated
67
67
  and a field ``shopfloor_user_id`` is set to the user; consider the
68
68
  move line is set in a buffer
69
69
 
@@ -451,7 +451,7 @@ class ZonePicking(Component):
451
451
  def _find_buffer_move_lines_domain(self, dest_package=None):
452
452
  domain = [
453
453
  ("picking_id.picking_type_id", "in", self.picking_types.ids),
454
- ("qty_done", ">", 0),
454
+ ("picked", "=", True),
455
455
  ("state", "not in", ("cancel", "done")),
456
456
  ("result_package_id", "!=", False),
457
457
  ("shopfloor_user_id", "=", self.env.user.id),
@@ -686,6 +686,9 @@ class ZonePicking(Component):
686
686
  response_error_func=self._response_for_change_pack_lot,
687
687
  )
688
688
  else:
689
+ # FIXME: this case shouldn't be possible anymore
690
+ # because a check on stock.quant.package.write in odoo core
691
+ # prevents to update a location on a package w/o move lines.
689
692
  response = self._list_move_lines(sublocation or self.zone_location)
690
693
  message = self.msg_store.package_has_no_product_to_take(barcode)
691
694
  return response, message
@@ -953,7 +956,7 @@ class ZonePicking(Component):
953
956
  for _move_line in package.move_line_ids:
954
957
  if _move_line.state not in ("assigned", "partially_available"):
955
958
  continue
956
- _move_line.qty_done = move_line.quantity
959
+ _move_line.qty_picked = move_line.quantity
957
960
  move_lines |= _move_line
958
961
  self._write_destination_on_lines(move_lines, location)
959
962
 
@@ -976,8 +979,7 @@ class ZonePicking(Component):
976
979
  # Zero check
977
980
  # Only apply zero check if the product is of type "product".
978
981
  zero_check = (
979
- move_line.product_id.type == "product"
980
- and self.picking_type.shopfloor_zero_check
982
+ move_line.product_id.is_storable and self.picking_type.shopfloor_zero_check
981
983
  )
982
984
  if zero_check and move_line.location_id.planned_qty_in_location_is_empty():
983
985
  response = self._response_for_zero_check(move_line)
@@ -1059,8 +1061,7 @@ class ZonePicking(Component):
1059
1061
  # Zero check
1060
1062
  # Only apply zero check if the product is of type "product".
1061
1063
  zero_check = (
1062
- move_line.product_id.type == "product"
1063
- and self.picking_type.shopfloor_zero_check
1064
+ move_line.product_id.is_storable and self.picking_type.shopfloor_zero_check
1064
1065
  )
1065
1066
  if zero_check and move_line.location_id.planned_qty_in_location_is_empty():
1066
1067
  response = self._response_for_zero_check(move_line)
@@ -1150,7 +1151,7 @@ class ZonePicking(Component):
1150
1151
  moved is 0 in the source location after the move (beware: at this
1151
1152
  point the product we put in the buffer is still considered to be in
1152
1153
  the source location, so we have to compute the source location's
1153
- quantity - qty_done).
1154
+ quantity - picked qty).
1154
1155
  * set_line_destination: the scanned location is invalid, user has to
1155
1156
  scan another one
1156
1157
  * set_line_destination+confirmation_required: the scanned location is not
@@ -1350,7 +1351,7 @@ class ZonePicking(Component):
1350
1351
  ("package_id", "=", package.id),
1351
1352
  ("lot_id", "=", lot.id),
1352
1353
  ("state", "not in", ("cancel", "done")),
1353
- ("qty_done", "=", 0),
1354
+ ("picked", "=", False),
1354
1355
  ]
1355
1356
  return domain
1356
1357
 
@@ -1361,11 +1362,11 @@ class ZonePicking(Component):
1361
1362
  because there is physically not enough goods. The move line is deleted
1362
1363
  (unreserve), and an inventory is created to reduce the quantity in the
1363
1364
  source location to prevent future errors until a correction. Beware:
1364
- the quantity already reserved and having a qty_done set on other lines
1365
+ the quantity already reserved and having a picked qty on other lines
1365
1366
  in the same location should remain reserved so the inventory's quantity
1366
- must be set to the total of qty_done of other lines.
1367
+ must be set to the total of picked qty of other lines.
1367
1368
 
1368
- The other lines not yet picked (no qty_done) in the same location for
1369
+ The other lines not yet picked in the same location for
1369
1370
  the same product, lot, package are unreserved as well (moves lines
1370
1371
  deleted, which unreserve their quantity on the move).
1371
1372
 
@@ -1481,7 +1482,7 @@ class ZonePicking(Component):
1481
1482
 
1482
1483
  * in the current zone location and picking type
1483
1484
  * not done or canceled
1484
- * with a qty_done > 0
1485
+ * picked
1485
1486
  * have a destination package
1486
1487
  * with ``shopfloor_user_id`` equal to the current user
1487
1488
 
@@ -372,7 +372,7 @@ ul.auto-toc {
372
372
  !! This file is generated by oca-gen-addon-readme !!
373
373
  !! changes will be overwritten. !!
374
374
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375
- !! source digest: sha256:534d443b8feb0fd2548ede9663e260ceb8dcfb20686a39d06022ee92bcc6d209
375
+ !! source digest: sha256:ba88a2ff0fc8dc7ea2a811a9507ddb4144cef230f98b4cbb1a6b506edefe389f
376
376
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
377
377
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/stock-logistics-shopfloor/tree/18.0/shopfloor"><img alt="OCA/stock-logistics-shopfloor" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--shopfloor-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-shopfloor-18-0/stock-logistics-shopfloor-18-0-shopfloor"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-shopfloor&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,24 @@ from . import test_delivery_select
64
64
  # from . import test_location_content_transfer_set_destination_package_or_line
65
65
  # from . import test_location_content_transfer_putaway
66
66
  # from . import test_location_content_transfer_mix
67
- # from . import test_zone_picking_base
68
- # from . import test_zone_picking_complete_mix_pack_flux
69
- # from . import test_zone_picking_start
70
- # from . import test_zone_picking_select_picking_type
71
- # from . import test_zone_picking_select_line
72
- # from . import test_zone_picking_select_line_no_prefill_qty
73
- # from . import test_zone_picking_select_line_first_scan_location
74
- # from . import test_zone_picking_set_line_destination
75
- # from . import test_zone_picking_set_line_destination_no_prefill_qty
76
- # from . import test_zone_picking_set_line_destination_pick_pack
77
- # from . import test_zone_picking_zero_check
78
- # from . import test_zone_picking_stock_issue
79
- # from . import test_zone_picking_change_pack_lot
80
- # from . import test_zone_picking_unload_buffer_lines
81
- # from . import test_zone_picking_unload_single
82
- # from . import test_zone_picking_unload_all
83
- # from . import test_zone_picking_unload_set_destination
84
- # from . import test_zone_picking_require_destination_package
67
+ from . import test_zone_picking_base
68
+ from . import test_zone_picking_complete_mix_pack_flux
69
+ from . import test_zone_picking_start
70
+ from . import test_zone_picking_select_picking_type
71
+ from . import test_zone_picking_select_line
72
+ from . import test_zone_picking_select_line_no_prefill_qty
73
+ from . import test_zone_picking_select_line_first_scan_location
74
+ from . import test_zone_picking_set_line_destination
75
+ from . import test_zone_picking_set_line_destination_no_prefill_qty
76
+ from . import test_zone_picking_set_line_destination_pick_pack
77
+ from . import test_zone_picking_zero_check
78
+ from . import test_zone_picking_stock_issue
79
+ from . import test_zone_picking_change_pack_lot
80
+ from . import test_zone_picking_unload_buffer_lines
81
+ from . import test_zone_picking_unload_single
82
+ from . import test_zone_picking_unload_all
83
+ from . import test_zone_picking_unload_set_destination
84
+ from . import test_zone_picking_require_destination_package
85
85
  from . import test_misc
86
86
  from . import test_move_action_assign
87
87
  from . import test_scan_anything
@@ -160,7 +160,7 @@ class ZonePickingSelectLineCase(ZonePickingCommonCase):
160
160
  qty_done=10.0,
161
161
  )
162
162
  # first line done
163
- move_line.qty_done = move_line.quantity
163
+ move_line.picked = True
164
164
  # get the next one
165
165
  response = self.service.dispatch(
166
166
  "scan_source",
@@ -223,7 +223,10 @@ class ZonePickingSelectLineCase(ZonePickingCommonCase):
223
223
  qty_done=10.0,
224
224
  )
225
225
 
226
- 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
  """
@@ -748,7 +751,7 @@ class ZonePickingSelectLineCase(ZonePickingCommonCase):
748
751
  )
749
752
  self.assertTrue(move_line_will_empty_location)
750
753
  # But if we check the location without giving the move line as parameter,
751
- # knowing that this move line hasn't its 'qty_done' field filled,
754
+ # knowing that this move line hasn't its 'qty_picked' field filled,
752
755
  # the location won't be considered empty with such pending move line
753
756
  move_line_will_empty_location = location_src.planned_qty_in_location_is_empty()
754
757
  self.assertFalse(move_line_will_empty_location)
@@ -165,7 +165,7 @@ class ZonePickingSetLineDestinationCase(ZonePickingCommonCase):
165
165
  # Check picking data
166
166
  moves_after = self.picking1.move_ids
167
167
  self.assertEqual(moves_before, moves_after)
168
- self.assertEqual(move_line.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_picked = move_line.qty_picked
72
72
  # Confirm the destination with the right destination
73
73
  response = self.service.dispatch(
74
74
  "set_destination",
@@ -78,7 +78,7 @@ class ZonePickingSetLineDestinationPickPackCase(ZonePickingCommonCase):
78
78
  "quantity": quantity_reserved,
79
79
  },
80
80
  )
81
- self.assertEqual(move_line.qty_done, previous_qty_done)
81
+ self.assertEqual(move_line.qty_picked, previous_qty_picked)
82
82
  self.assert_response_set_line_destination(
83
83
  response,
84
84
  zone_location,
@@ -198,6 +198,7 @@ class ZonePickingSetLineDestinationPickPackCase(ZonePickingCommonCase):
198
198
  {
199
199
  "name": "TEST DEFAULT",
200
200
  "package_type_id": self.carrier.test_default_packaging_id.id,
201
+ "product_id": self.free_product.id,
201
202
  }
202
203
  )
203
204
  )
@@ -220,7 +221,7 @@ class ZonePickingSetLineDestinationPickPackCase(ZonePickingCommonCase):
220
221
  {
221
222
  "result_package_id": self.free_package.id,
222
223
  "quantity": 10,
223
- "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.1
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: odoo-addon-base_rest==18.0.*
6
6
  Requires-Dist: odoo-addon-jsonifier==18.0.*
@@ -42,7 +42,7 @@ Shopfloor
42
42
  !! This file is generated by oca-gen-addon-readme !!
43
43
  !! changes will be overwritten. !!
44
44
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
45
- !! source digest: sha256:534d443b8feb0fd2548ede9663e260ceb8dcfb20686a39d06022ee92bcc6d209
45
+ !! source digest: sha256:ba88a2ff0fc8dc7ea2a811a9507ddb4144cef230f98b4cbb1a6b506edefe389f
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=-Hc6d6pxlXdCzqheiYYk6moSPEe6P0qxKv42ADAMEuI,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=apuuRwH0nXDJJ8podHpNQzXRen-B7PK259o7dFKBjIo,2572
4
4
  odoo/addons/shopfloor/exceptions.py,sha256=81KpIGVkuYRhA0cIuml4pg4G3izqkAAhLqoXZbUd4X8,197
5
5
  odoo/addons/shopfloor/utils.py,sha256=Be7J8Tu7ivOW4lpe8IjKxwqfTwfmK-ZkeFEavoYIIF4,375
6
6
  odoo/addons/shopfloor/actions/__init__.py,sha256=_yTf-NtaJmSylBJIoJJvKNYEI-wlqpyRw-S5eJRRzEM,400
@@ -16,7 +16,7 @@ odoo/addons/shopfloor/actions/packaging.py,sha256=uZxD1bisNS_8M5ZQAHuOz2MR6l26XH
16
16
  odoo/addons/shopfloor/actions/savepoint.py,sha256=bIpPUPg-2BbO8hz277kWnq4DP_cayhAB_v8Rp2mUHjg,1143
17
17
  odoo/addons/shopfloor/actions/schema.py,sha256=H_4HCaYB7HiqU35WO2NmHtOLJ087iFLbiJD4HdiHFjU,8555
18
18
  odoo/addons/shopfloor/actions/schema_detail.py,sha256=_xtm8ptRXAPBIMTyr8XKMQtogcjBudh-QRqKUZEEHGU,4968
19
- odoo/addons/shopfloor/actions/search.py,sha256=1cGfiB4TTIp5Vi8p_0muliueMmvmRB69-0nlrPh8gnI,6957
19
+ odoo/addons/shopfloor/actions/search.py,sha256=9mcpeYo1iFQPdt_F2wLkqK5nRpR_gkFaOTReaM2Q7r4,7014
20
20
  odoo/addons/shopfloor/actions/stock.py,sha256=oWy5QvZNv6IFbYhet0xtjV8T_bxrVi5UMy2-TIrUIko,11192
21
21
  odoo/addons/shopfloor/actions/stock_unreserve.py,sha256=P0a9V53MqG4sDln8yX0Id-nEXz7cydiFY_BBznioQpg,3090
22
22
  odoo/addons/shopfloor/components/__init__.py,sha256=a3ox1WOD1JhrQUrYMRn-yDJI0Vvc7ciKdmXuZB29ToU,173
@@ -55,7 +55,7 @@ odoo/addons/shopfloor/models/shopfloor_app.py,sha256=ZfVahQYm0jzyeH7EtlOOhxYUif9
55
55
  odoo/addons/shopfloor/models/shopfloor_menu.py,sha256=aiA8y9bfy0JDgaRr1wwbRXmkleTefui7wksBS2qOYUM,23207
56
56
  odoo/addons/shopfloor/models/stock_location.py,sha256=InkhTmnqYZaXCXIarku-NS1T6BO8EmLxg2zBE0CHeZ8,3092
57
57
  odoo/addons/shopfloor/models/stock_move.py,sha256=FcfRILSZygUvFgTd-AjjW_SoKgUiQtzC-4u_BzK65vw,5671
58
- odoo/addons/shopfloor/models/stock_move_line.py,sha256=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=BI25T234hcjlgGDIMjsO6PfDUKuPP7WNtZ6TcWIHoxQ,84130
82
82
  odoo/addons/shopfloor/services/forms/__init__.py,sha256=nxwJdKX47hb56ERf4Qb3UE5dkdsHCbkaXMAXs4XMAd8,27
83
83
  odoo/addons/shopfloor/services/forms/picking_form.py,sha256=pX1hbALlCqTVG3m1HYY5xtgbTcSHVnpaGaqm3akBS-U,2718
84
84
  odoo/addons/shopfloor/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
85
- odoo/addons/shopfloor/static/description/index.html,sha256=KCn-2Vii2QXZBYP-gcQE0GWFXyFS1wJ4055e0IppcVQ,18540
86
- odoo/addons/shopfloor/tests/__init__.py,sha256=Gh1JDevZQ10f2B24wdJumgf7jQXjkJX2egy0Hpvw5TU,4048
85
+ odoo/addons/shopfloor/static/description/index.html,sha256=CIM7XKUP900WQaicQfZz6OoRfT-p1ShIepEPKYE1Gdg,18540
86
+ odoo/addons/shopfloor/tests/__init__.py,sha256=8t1Eocv-42M2tzBAkG3Wa6tsfhZIUIgxOspm3hqRCd4,4012
87
87
  odoo/addons/shopfloor/tests/common.py,sha256=lFdSQRXBjwCr7StVJltEwLtA_a4V77JcBcKkGAnAL5M,11676
88
88
  odoo/addons/shopfloor/tests/models.py,sha256=PWNPC6DgFMbrarojSxUqwycnBdePX-4Q5Z0rn1WwQqY,940
89
89
  odoo/addons/shopfloor/tests/test_actions_change_package_lot.py,sha256=bUn-FXPWY-eo4kaS0S7jU4ge_xl1A9jfU_rNZQT8ZPs,47528
@@ -164,27 +164,26 @@ odoo/addons/shopfloor/tests/test_zone_picking_base.py,sha256=I4mw2TP74mwU1lTxKul
164
164
  odoo/addons/shopfloor/tests/test_zone_picking_change_pack_lot.py,sha256=9Bg29Zp-vfgnF-P4U1xgXhHWhOWxfQkzzublZU2Ee-A,5414
165
165
  odoo/addons/shopfloor/tests/test_zone_picking_complete_mix_pack_flux.py,sha256=R0xDc9LKVXCjx4KvXqrx0-Axk7PNWJ8aCZvspJG7Jxc,2325
166
166
  odoo/addons/shopfloor/tests/test_zone_picking_require_destination_package.py,sha256=rYXFntqBjGhxWS_kxEBbhP5Lkd1AdTI15wSd6TIyVRA,2248
167
- odoo/addons/shopfloor/tests/test_zone_picking_select_line.py,sha256=f8uGGF1LdJqoZmyjCtnrnA6EF5nPe7VTHzXzXL818HY,29956
167
+ odoo/addons/shopfloor/tests/test_zone_picking_select_line.py,sha256=0Go4E6ZKq-GDwa-Q8gVM4IXQGkSxYqZny7M5-6_YyZk,30130
168
168
  odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py,sha256=uXDRd70zWRy08SinTULIzTJHEmC9u7FpVqOStuigElc,8464
169
- odoo/addons/shopfloor/tests/test_zone_picking_select_line_first_scan_location.py.bak,sha256=-TMgeipU2ROoSuyjLPMEMhK5EijwqJm0qS0xixK6TAE,7937
170
169
  odoo/addons/shopfloor/tests/test_zone_picking_select_line_no_prefill_qty.py,sha256=9pKownGCjuXZDjQP4O3RHePRQ7bIIB7uV1GOCJDtdME,4360
171
170
  odoo/addons/shopfloor/tests/test_zone_picking_select_picking_type.py,sha256=kuuPjKvpBRrj36z-lj4P7NMLqszkZasIdpvx9mayUQI,870
172
- odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py,sha256=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=rtRqQ0F6Vf_gIdI8vA7VWH70zgPHyvWgbOF9syBl5Q4,9006
176
175
  odoo/addons/shopfloor/tests/test_zone_picking_start.py,sha256=aINReAOIPcv10977iDD0imjYDmqKG7bhgFOvYLSLgjs,7195
177
176
  odoo/addons/shopfloor/tests/test_zone_picking_stock_issue.py,sha256=VdbSdxYL7w3M_vxTTv7ekY5UQpSoAMRaL4zqXovZcss,4498
178
- odoo/addons/shopfloor/tests/test_zone_picking_unload_all.py,sha256=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.1.dist-info/METADATA,sha256=KAzoXnLYJsO1nn3dxi3htUGhC7IL589REK-Pwi91fos,7580
187
+ odoo_addon_shopfloor-18.0.0.3.1.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
188
+ odoo_addon_shopfloor-18.0.0.3.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
189
+ odoo_addon_shopfloor-18.0.0.3.1.dist-info/RECORD,,
@@ -1,202 +0,0 @@
1
- # Copyright 2023 Camptocamp SA (http://www.camptocamp.com)
2
- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3
-
4
- from .test_zone_picking_base import ZonePickingCommonCase
5
-
6
-
7
- class ZonePickingSelectLineFirstScanLocationCase(ZonePickingCommonCase):
8
- """Tests for endpoint used from select_line with option 'First scan location'
9
-
10
- * /scan_source
11
-
12
- """
13
-
14
- def setUp(self):
15
- super().setUp()
16
- self.service.work.current_picking_type = self.picking1.picking_type_id
17
- self.menu.sudo().scan_location_or_pack_first = True
18
-
19
- def test_scan_source_first_the_product_not_ok(self):
20
- """Check first scanning a product barcode is not allowed."""
21
- response = self.service.dispatch(
22
- "scan_source",
23
- params={"barcode": self.product_a.barcode},
24
- )
25
- move_lines = self.service._find_location_move_lines(
26
- locations=self.zone_location,
27
- package=False,
28
- )
29
- self.assertTrue(response.get("data").get("select_line"))
30
- self.assert_response_select_line(
31
- response,
32
- zone_location=self.zone_location,
33
- picking_type=self.picking_type,
34
- message=self.service.msg_store.barcode_not_found(),
35
- move_lines=move_lines,
36
- location_first=True,
37
- )
38
-
39
- def test_scan_source_scan_location_then_product_ok(self):
40
- """Check scanning location and then product is fine."""
41
- # Have the same product multiple time in sublocation 2
42
- pickingA = self._create_picking(
43
- lines=[(self.product_b, 12), (self.product_c, 13)]
44
- )
45
- self._fill_stock_for_moves(
46
- pickingA.move_lines, in_lot=True, location=self.zone_sublocation2
47
- )
48
- pickingA.action_assign()
49
- # Scan product B, send sublocation to simulate a previous scan for a location
50
- response = self.service.dispatch(
51
- "scan_source",
52
- params={
53
- "barcode": self.product_b.barcode,
54
- "sublocation_id": self.zone_sublocation2.id,
55
- },
56
- )
57
- move_lines = self.service._find_location_move_lines(
58
- locations=self.zone_sublocation2, product=self.product_b
59
- )
60
- self.assert_response_select_line(
61
- response,
62
- zone_location=self.zone_location,
63
- picking_type=self.picking_type,
64
- message=self.service.msg_store.several_move_with_different_lot(),
65
- move_lines=move_lines,
66
- product=self.product_b,
67
- sublocation=self.zone_sublocation2,
68
- location_first=True,
69
- )
70
-
71
- def test_scan_source_can_not_select_line_with_package(self):
72
- """Do not allow to scan product with package without scanning pack first."""
73
- # Picking 1 with one product in a package is already in sub location 1
74
- pickingA = self._create_picking(lines=[(self.product_a, 13)])
75
- self._fill_stock_for_moves(
76
- pickingA.move_lines[0], in_package=True, location=self.zone_sublocation1
77
- )
78
- pickingA.action_assign()
79
- # Scanning a product after having scan a location (sublocation_id)
80
- response = self.service.dispatch(
81
- "scan_source",
82
- params={
83
- "barcode": self.product_a.barcode,
84
- "sublocation_id": self.zone_sublocation1.id,
85
- },
86
- )
87
- self.assertEqual(response["next_state"], "select_line")
88
- move_lines = self.service._find_location_move_lines(
89
- locations=self.zone_sublocation1, package=False, product=self.product_a
90
- )
91
- self.assert_response_select_line(
92
- response,
93
- zone_location=self.zone_location,
94
- sublocation=self.zone_sublocation1,
95
- picking_type=self.picking_type,
96
- message=self.service.msg_store.product_not_found(),
97
- move_lines=move_lines,
98
- location_first=True,
99
- )
100
-
101
- def test_scan_source_scan_location_no_lines_without_package(self):
102
- """Check list of lines when first scanning location.
103
-
104
- With the scan_location_or_pack_first option on. When scanning first the
105
- location and no lines without package exist, ask to scan a package.
106
-
107
- """
108
- # Picking 1 with one product in a package is already in sub location 1
109
- pickingA = self._create_picking(lines=[(self.product_a, 13)])
110
- self._fill_stock_for_moves(
111
- pickingA.move_lines[0], in_package=True, location=self.zone_sublocation1
112
- )
113
- pickingA.action_assign()
114
- response = self.service.dispatch(
115
- "scan_source",
116
- params={
117
- "barcode": self.zone_sublocation1.barcode,
118
- },
119
- )
120
- move_lines = self.service._find_location_move_lines(
121
- locations=self.zone_sublocation1, package=False
122
- )
123
- self.assert_response_select_line(
124
- response,
125
- zone_location=self.zone_location,
126
- sublocation=self.zone_sublocation1,
127
- picking_type=self.picking_type,
128
- message=self.service.msg_store.several_packs_in_location(
129
- self.zone_sublocation1
130
- ),
131
- move_lines=move_lines,
132
- location_first=True,
133
- )
134
-
135
- def test_scan_source_scan_package_first_with_two_product(self):
136
- """Scan a package with two product and then scan a product."""
137
- pickingA = self._create_picking(
138
- lines=[(self.product_a, 13), (self.product_b, 5)]
139
- )
140
- self._fill_stock_for_moves(
141
- pickingA.move_lines, in_package=True, location=self.zone_sublocation1
142
- )
143
- pickingA.action_assign()
144
- package = pickingA.package_level_ids[0].package_id
145
- response = self.service.dispatch(
146
- "scan_source",
147
- params={
148
- "barcode": package.name,
149
- },
150
- )
151
- move_lines = self.service._find_location_move_lines(
152
- locations=self.zone_sublocation1, package=package
153
- )
154
- self.assertTrue(len(move_lines), 2)
155
- self.assert_response_select_line(
156
- response,
157
- zone_location=self.zone_location,
158
- picking_type=self.picking_type,
159
- message=self.service.msg_store.several_products_in_package(package),
160
- move_lines=move_lines,
161
- location_first=True,
162
- package=package,
163
- )
164
- response = self.service.dispatch(
165
- "scan_source",
166
- params={"barcode": self.product_a.barcode, "package_id": package.id},
167
- )
168
- move_line = pickingA.move_line_ids[0]
169
- self.assert_response_set_line_destination(
170
- response,
171
- zone_location=self.zone_location,
172
- picking_type=self.picking_type,
173
- move_line=move_line,
174
- qty_done=13.0,
175
- )
176
-
177
- # def test_scan_source_scan_package_first_with_one_line(self):
178
- # pickingA = self._create_picking(lines=[(self.product_a, 13)])
179
- # self._fill_stock_for_moves(
180
- # pickingA.move_lines[0], in_package=True, location=self.zone_sublocation1
181
- # )
182
- # pickingA.action_assign()
183
- # package = pickingA.package_level_ids[0].package_id
184
- # response = self.service.dispatch(
185
- # "scan_source",
186
- # params={
187
- # "barcode": package.name,
188
- # },
189
- # )
190
- # move_lines = self.service._find_location_move_lines(
191
- # locations=self.zone_sublocation1, package=package
192
- # )
193
- # self.assert_response_select_line(
194
- # response,
195
- # zone_location=self.zone_location,
196
- # picking_type=self.picking_type,
197
- # # message=self.service.msg_store.location_empty_scan_package(
198
- # # self.zone_sublocation1
199
- # # ),
200
- # move_lines=move_lines,
201
- # # location_first=True,
202
- # )