odoo-addon-shopfloor 16.0.2.12.0.1__py3-none-any.whl → 18.0.0.1.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.
Files changed (105) hide show
  1. odoo/addons/shopfloor/README.rst +79 -52
  2. odoo/addons/shopfloor/__manifest__.py +11 -4
  3. odoo/addons/shopfloor/actions/__init__.py +0 -1
  4. odoo/addons/shopfloor/actions/change_package_lot.py +4 -6
  5. odoo/addons/shopfloor/actions/data.py +7 -6
  6. odoo/addons/shopfloor/actions/inventory.py +1 -1
  7. odoo/addons/shopfloor/actions/message.py +1 -1
  8. odoo/addons/shopfloor/actions/move_line_search.py +1 -1
  9. odoo/addons/shopfloor/actions/search.py +8 -32
  10. odoo/addons/shopfloor/actions/stock.py +8 -7
  11. odoo/addons/shopfloor/i18n/ca.po +0 -5
  12. odoo/addons/shopfloor/i18n/de.po +0 -5
  13. odoo/addons/shopfloor/i18n/es_AR.po +0 -5
  14. odoo/addons/shopfloor/i18n/it.po +2 -8
  15. odoo/addons/shopfloor/i18n/pt_BR.po +0 -5
  16. odoo/addons/shopfloor/i18n/shopfloor.pot +7 -194
  17. odoo/addons/shopfloor/models/stock_location.py +5 -5
  18. odoo/addons/shopfloor/models/stock_move.py +24 -7
  19. odoo/addons/shopfloor/models/stock_move_line.py +29 -82
  20. odoo/addons/shopfloor/models/stock_picking.py +8 -6
  21. odoo/addons/shopfloor/models/stock_quant_package.py +2 -2
  22. odoo/addons/shopfloor/readme/CONTRIBUTORS.md +17 -0
  23. odoo/addons/shopfloor/readme/CREDITS.md +5 -0
  24. odoo/addons/shopfloor/readme/DESCRIPTION.md +37 -0
  25. odoo/addons/shopfloor/readme/{HISTORY.rst → HISTORY.md} +1 -2
  26. odoo/addons/shopfloor/readme/ROADMAP.md +10 -0
  27. odoo/addons/shopfloor/readme/USAGE.md +6 -0
  28. odoo/addons/shopfloor/services/checkout.py +9 -9
  29. odoo/addons/shopfloor/services/cluster_picking.py +2 -2
  30. odoo/addons/shopfloor/services/delivery.py +4 -6
  31. odoo/addons/shopfloor/services/forms/picking_form.py +4 -1
  32. odoo/addons/shopfloor/services/location_content_transfer.py +1 -1
  33. odoo/addons/shopfloor/services/single_pack_transfer.py +1 -1
  34. odoo/addons/shopfloor/services/zone_picking.py +5 -9
  35. odoo/addons/shopfloor/static/description/index.html +41 -18
  36. odoo/addons/shopfloor/tests/__init__.py +74 -73
  37. odoo/addons/shopfloor/tests/common.py +9 -9
  38. odoo/addons/shopfloor/tests/test_actions_change_package_lot.py +104 -71
  39. odoo/addons/shopfloor/tests/test_actions_data.py +17 -21
  40. odoo/addons/shopfloor/tests/test_actions_data_base.py +9 -3
  41. odoo/addons/shopfloor/tests/test_actions_data_detail.py +17 -19
  42. odoo/addons/shopfloor/tests/test_actions_search.py +2 -1
  43. odoo/addons/shopfloor/tests/test_actions_stock.py +4 -1
  44. odoo/addons/shopfloor/tests/test_checkout_auto_post.py +3 -3
  45. odoo/addons/shopfloor/tests/test_checkout_base.py +1 -1
  46. odoo/addons/shopfloor/tests/test_checkout_list_delivery_packaging.py +1 -1
  47. odoo/addons/shopfloor/tests/test_checkout_list_package.py +4 -4
  48. odoo/addons/shopfloor/tests/test_checkout_new_package.py +3 -3
  49. odoo/addons/shopfloor/tests/test_checkout_no_package.py +3 -3
  50. odoo/addons/shopfloor/tests/test_checkout_scan_dest_location.py +1 -1
  51. odoo/addons/shopfloor/tests/test_checkout_scan_package_action.py +11 -11
  52. odoo/addons/shopfloor/tests/test_checkout_select_package_base.py +1 -1
  53. odoo/addons/shopfloor/tests/test_checkout_set_qty.py +17 -17
  54. odoo/addons/shopfloor/tests/test_checkout_summary.py +2 -2
  55. odoo/addons/shopfloor/tests/test_cluster_picking_base.py +1 -1
  56. odoo/addons/shopfloor/tests/test_cluster_picking_batch.py +2 -2
  57. odoo/addons/shopfloor/tests/test_cluster_picking_change_pack_lot.py +1 -1
  58. odoo/addons/shopfloor/tests/test_cluster_picking_is_zero.py +1 -1
  59. odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination.py +17 -19
  60. odoo/addons/shopfloor/tests/test_cluster_picking_scan_line_no_prefill_qty.py +1 -1
  61. odoo/addons/shopfloor/tests/test_cluster_picking_stock_issue.py +5 -5
  62. odoo/addons/shopfloor/tests/test_delivery_base.py +4 -6
  63. odoo/addons/shopfloor/tests/test_delivery_done.py +1 -1
  64. odoo/addons/shopfloor/tests/test_delivery_reset_qty_done_line.py +1 -1
  65. odoo/addons/shopfloor/tests/test_delivery_reset_qty_done_pack.py +1 -1
  66. odoo/addons/shopfloor/tests/test_delivery_scan_deliver.py +6 -6
  67. odoo/addons/shopfloor/tests/test_location_content_transfer_base.py +2 -2
  68. odoo/addons/shopfloor/tests/test_location_content_transfer_mix.py +8 -8
  69. odoo/addons/shopfloor/tests/test_location_content_transfer_set_destination_package_or_line.py +41 -41
  70. odoo/addons/shopfloor/tests/test_location_content_transfer_single.py +3 -3
  71. odoo/addons/shopfloor/tests/test_menu_base.py +4 -4
  72. odoo/addons/shopfloor/tests/test_move_action_assign.py +19 -4
  73. odoo/addons/shopfloor/tests/test_single_pack_transfer.py +3 -3
  74. odoo/addons/shopfloor/tests/test_stock_split.py +77 -17
  75. odoo/addons/shopfloor/tests/test_zone_picking_base.py +5 -5
  76. odoo/addons/shopfloor/tests/test_zone_picking_change_pack_lot.py +2 -2
  77. odoo/addons/shopfloor/tests/test_zone_picking_complete_mix_pack_flux.py +2 -2
  78. odoo/addons/shopfloor/tests/test_zone_picking_require_destination_package.py +3 -3
  79. odoo/addons/shopfloor/tests/test_zone_picking_select_line.py +4 -4
  80. odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py +29 -29
  81. odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_package_not_allowed.py +2 -2
  82. odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_pick_pack.py +12 -12
  83. odoo/addons/shopfloor/tests/test_zone_picking_start.py +1 -1
  84. odoo/addons/shopfloor/tests/test_zone_picking_unload_all.py +12 -12
  85. odoo/addons/shopfloor/tests/test_zone_picking_unload_buffer_lines.py +4 -4
  86. odoo/addons/shopfloor/tests/test_zone_picking_unload_set_destination.py +10 -10
  87. odoo/addons/shopfloor/tests/test_zone_picking_unload_single.py +3 -3
  88. odoo/addons/shopfloor/views/shopfloor_menu.xml +33 -102
  89. odoo/addons/shopfloor/views/stock_move_line.xml +2 -2
  90. odoo/addons/shopfloor/views/stock_picking_type.xml +1 -1
  91. odoo_addon_shopfloor-18.0.0.1.1.dist-info/METADATA +222 -0
  92. {odoo_addon_shopfloor-16.0.2.12.0.1.dist-info → odoo_addon_shopfloor-18.0.0.1.1.dist-info}/RECORD +94 -98
  93. {odoo_addon_shopfloor-16.0.2.12.0.1.dist-info → odoo_addon_shopfloor-18.0.0.1.1.dist-info}/WHEEL +1 -1
  94. odoo_addon_shopfloor-18.0.0.1.1.dist-info/top_level.txt +1 -0
  95. odoo/addons/shopfloor/actions/barcode_parser.py +0 -44
  96. odoo/addons/shopfloor/migrations/16.0.2.0.0/post-migration.py +0 -41
  97. odoo/addons/shopfloor/migrations/16.0.2.4.2/post-init_search_move_line_options.py +0 -33
  98. odoo/addons/shopfloor/migrations/16.0.2.4.2/post-migration.py +0 -29
  99. odoo/addons/shopfloor/readme/CONTRIBUTORS.rst +0 -18
  100. odoo/addons/shopfloor/readme/CREDITS.rst +0 -5
  101. odoo/addons/shopfloor/readme/DESCRIPTION.rst +0 -17
  102. odoo/addons/shopfloor/readme/ROADMAP.rst +0 -4
  103. odoo/addons/shopfloor/readme/USAGE.rst +0 -6
  104. odoo_addon_shopfloor-16.0.2.12.0.1.dist-info/METADATA +0 -193
  105. odoo_addon_shopfloor-16.0.2.12.0.1.dist-info/top_level.txt +0 -1
@@ -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:c418f1851f7591fa3b9cde9ce01a2a3507baf0066f7453d93cfea051273d85fc
14
+ !! source digest: sha256:739657eee1fdf9678a26382abddbac38fe12b94108c24fc7367b427639a5c8b9
15
15
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
16
 
17
17
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -20,35 +20,55 @@ Shopfloor
20
20
  .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
21
21
  :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
22
22
  :alt: License: AGPL-3
23
- .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwms-lightgray.png?logo=github
24
- :target: https://github.com/OCA/wms/tree/16.0/shopfloor
25
- :alt: OCA/wms
23
+ .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--shopfloor-lightgray.png?logo=github
24
+ :target: https://github.com/OCA/stock-logistics-shopfloor/tree/18.0/shopfloor
25
+ :alt: OCA/stock-logistics-shopfloor
26
26
  .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
27
- :target: https://translation.odoo-community.org/projects/wms-16-0/wms-16-0-shopfloor
27
+ :target: https://translation.odoo-community.org/projects/stock-logistics-shopfloor-18-0/stock-logistics-shopfloor-18-0-shopfloor
28
28
  :alt: Translate me on Weblate
29
29
  .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
30
- :target: https://runboat.odoo-community.org/builds?repo=OCA/wms&target_branch=16.0
30
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-shopfloor&target_branch=18.0
31
31
  :alt: Try me on Runboat
32
32
 
33
33
  |badge1| |badge2| |badge3| |badge4| |badge5|
34
34
 
35
- Shopfloor is a barcode scanner application for internal warehouse operations.
35
+ Shopfloor is a barcode scanner application for internal warehouse
36
+ operations.
36
37
 
37
38
  The application supports scenarios, to relate to Operation Types:
38
39
 
39
- * Cluster Picking
40
- * Zone Picking
41
- * Checkout/Packing
42
- * Delivery
43
- * Location Content Transfer
44
- * Single Pack Transfer
40
+ - Cluster Picking
41
+ - Zone Picking
42
+ - Checkout/Packing
43
+ - Delivery
44
+ - Location Content Transfer
45
+ - Single Pack Transfer
45
46
 
46
- This module provides REST APIs to support the scenarios. It needs a frontend
47
- to consume the backend APIs and provide screens for users on barcode devices.
48
- A default front-end application is provided by ``shopfloor_mobile``.
47
+ This module provides REST APIs to support the scenarios. It needs a
48
+ frontend to consume the backend APIs and provide screens for users on
49
+ barcode devices. A default front-end application is provided by
50
+ ``shopfloor_mobile``.
49
51
 
50
- | Note: if you want to enable a new scenario on an existing application, you must trigger the registry sync on the shopfloor.app in a post_init_hook or a post-migrate script.
51
- | See an example `here <https://github.com/OCA/wms/pull/520/commits/bccdfd445a9bc943998c4848f183a076e8459a98>`_.
52
+ | Note: if you want to enable a new scenario on an existing application,
53
+ you must trigger the registry sync on the shopfloor.app in a
54
+ post_init_hook or a post-migrate script.
55
+ | See an example
56
+ `here <https://github.com/OCA/wms/pull/520/commits/bccdfd445a9bc943998c4848f183a076e8459a98>`__.
57
+
58
+ **WARNING v18**
59
+
60
+ Scenario will be migrated one by one.
61
+
62
+ Current availability status:
63
+
64
+ - ☐ checkout
65
+ - ☐ cluster picking
66
+ - ☐ zone picking
67
+ - ☐ delivery
68
+ - ☐ location content transfer
69
+ - ☐ single pack transfer (to be discarded in favor of
70
+ shopfloor_single_product_transfer)
71
+ - ☐ zone picking
52
72
 
53
73
  **Table of contents**
54
74
 
@@ -58,36 +78,43 @@ A default front-end application is provided by ``shopfloor_mobile``.
58
78
  Usage
59
79
  =====
60
80
 
61
- An API key is created in the Demo data (for development), using
62
- the Demo user. The key to use in the HTTP header ``API-KEY`` is: 72B044F7AC780DAC
81
+ An API key is created in the Demo data (for development), using the Demo
82
+ user. The key to use in the HTTP header ``API-KEY`` is: 72B044F7AC780DAC
63
83
 
64
- Curl example::
84
+ Curl example:
65
85
 
66
- curl -X POST "http://localhost:8069/shopfloor/user/menu" -H "accept: */*" -H "Content-Type: application/json" -H "API-KEY: 72B044F7AC780DAC"
86
+ ::
87
+
88
+ curl -X POST "http://localhost:8069/shopfloor/user/menu" -H "accept: */*" -H "Content-Type: application/json" -H "API-KEY: 72B044F7AC780DAC"
67
89
 
68
90
  Known issues / Roadmap
69
91
  ======================
70
92
 
71
- * improve documentation
72
- * split out scenario components to their own modules
73
- * maybe split common stock features to `shopfloor_stock_base`
74
- and move scenario to `shopfloor_wms`?
93
+ - improve documentation
94
+ - split out scenario components to their own modules
95
+ - maybe split common stock features to shopfloor_stock_base and move
96
+ scenario to shopfloor_wms?
97
+
98
+ **WARNING v18**
99
+
100
+ We don't want to split now the scenario to keep it as much as possible
101
+ in line w/ v16. We'll do it later.
75
102
 
76
103
  Changelog
77
104
  =========
78
105
 
79
106
  13.0.1.0.0
80
- ~~~~~~~~~~
107
+ ----------
81
108
 
82
109
  First official version.
83
110
 
84
111
  Bug Tracker
85
112
  ===========
86
113
 
87
- Bugs are tracked on `GitHub Issues <https://github.com/OCA/wms/issues>`_.
114
+ Bugs are tracked on `GitHub Issues <https://github.com/OCA/stock-logistics-shopfloor/issues>`_.
88
115
  In case of trouble, please check there if your issue has already been reported.
89
116
  If you spotted it first, help us to smash it by providing a detailed and welcomed
90
- `feedback <https://github.com/OCA/wms/issues/new?body=module:%20shopfloor%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
117
+ `feedback <https://github.com/OCA/stock-logistics-shopfloor/issues/new?body=module:%20shopfloor%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
91
118
 
92
119
  Do not contact contributors directly about support or help with technical issues.
93
120
 
@@ -95,45 +122,45 @@ Credits
95
122
  =======
96
123
 
97
124
  Authors
98
- ~~~~~~~
125
+ -------
99
126
 
100
127
  * Camptocamp
101
128
  * BCIM
102
129
  * Akretion
103
130
 
104
131
  Contributors
105
- ~~~~~~~~~~~~
106
-
107
- * Guewen Baconnier <guewen.baconnier@camptocamp.com>
108
- * Simone Orsi <simahawk@gmail.com>
109
- * Sébastien Alix <sebastien.alix@camptocamp.com>
110
- * Alexandre Fayolle <alexandre.fayolle@camptocamp.com>
111
- * Benoit Guillot <benoit.guillot@akretion.com>
112
- * Thierry Ducrest <thierry.ducrest@camptocamp.com>
113
- * Raphaël Reverdy <raphael.reverdy@akretion.com>
114
- * Jacques-Etienne Baudoux <je@bcim.be>
115
- * Juan Miguel Sánchez Arce <juan.sanchez@camptocamp.com>
116
- * Michael Tietz (MT Software) <mtietz@mt-software.de>
117
- * Souheil Bejaoui <souheil.bejaoui@acsone.eu>
118
- * Laurent Mignon <laurent.mignon@acsone.eu>
132
+ ------------
133
+
134
+ - Guewen Baconnier <guewen.baconnier@camptocamp.com>
135
+ - Simone Orsi <simahawk@gmail.com>
136
+ - Sébastien Alix <sebastien.alix@camptocamp.com>
137
+ - Alexandre Fayolle <alexandre.fayolle@camptocamp.com>
138
+ - Benoit Guillot <benoit.guillot@akretion.com>
139
+ - Thierry Ducrest <thierry.ducrest@camptocamp.com>
140
+ - Raphaël Reverdy <raphael.reverdy@akretion.com>
141
+ - Jacques-Etienne Baudoux <je@bcim.be>
142
+ - Juan Miguel Sánchez Arce <juan.sanchez@camptocamp.com>
143
+ - Michael Tietz (MT Software) <mtietz@mt-software.de>
144
+ - Souheil Bejaoui <souheil.bejaoui@acsone.eu>
145
+ - Laurent Mignon <laurent.mignon@acsone.eu>
119
146
 
120
147
  Design
121
148
  ~~~~~~
122
149
 
123
- * Joël Grand-Guillaume <joel.grandguillaume@camptocamp.com>
124
- * Jacques-Etienne Baudoux <je@bcim.be>
150
+ - Joël Grand-Guillaume <joel.grandguillaume@camptocamp.com>
151
+ - Jacques-Etienne Baudoux <je@bcim.be>
125
152
 
126
153
  Other credits
127
- ~~~~~~~~~~~~~
154
+ -------------
128
155
 
129
156
  **Financial support**
130
157
 
131
- * Cosanum
132
- * Camptocamp R&D
133
- * Akretion R&D
158
+ - Cosanum
159
+ - Camptocamp R&D
160
+ - Akretion R&D
134
161
 
135
162
  Maintainers
136
- ~~~~~~~~~~~
163
+ -----------
137
164
 
138
165
  This module is maintained by the OCA.
139
166
 
@@ -159,6 +186,6 @@ Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
159
186
 
160
187
  |maintainer-guewen| |maintainer-simahawk| |maintainer-sebalix|
161
188
 
162
- This module is part of the `OCA/wms <https://github.com/OCA/wms/tree/16.0/shopfloor>`_ project on GitHub.
189
+ This module is part of the `OCA/stock-logistics-shopfloor <https://github.com/OCA/stock-logistics-shopfloor/tree/18.0/shopfloor>`_ project on GitHub.
163
190
 
164
191
  You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
@@ -6,10 +6,10 @@
6
6
  {
7
7
  "name": "Shopfloor",
8
8
  "summary": "manage warehouse operations with barcode scanners",
9
- "version": "16.0.2.12.0",
9
+ "version": "18.0.0.1.1",
10
10
  "development_status": "Beta",
11
11
  "category": "Inventory",
12
- "website": "https://github.com/OCA/wms",
12
+ "website": "https://github.com/OCA/stock-logistics-shopfloor",
13
13
  "author": "Camptocamp, BCIM, Akretion, Odoo Community Association (OCA)",
14
14
  "maintainers": ["guewen", "simahawk", "sebalix"],
15
15
  "license": "AGPL-3",
@@ -22,13 +22,15 @@
22
22
  "base_rest",
23
23
  "base_sparse_field",
24
24
  # OCA / stock-logistics-warehouse
25
- "stock_helper",
25
+ "stock_location_is_sublocation",
26
26
  "stock_picking_completion_info",
27
27
  # OCA / stock-logistics-workflow
28
28
  "stock_move_line_change_lot",
29
+ "stock_picking_progress",
30
+ # OCA / stock-logistics-tracking
29
31
  "stock_quant_package_dimension",
30
32
  "stock_quant_package_product_packaging",
31
- "stock_picking_progress",
33
+ # OCA / product-attribute
32
34
  # TODO: used for manuf info on prod detail.
33
35
  # This must be an optional dep
34
36
  "product_manufacturer",
@@ -46,6 +48,11 @@
46
48
  "product_packaging_level",
47
49
  # OCA / delivery
48
50
  "stock_picking_delivery_link",
51
+ # TODO v18: new dependency due to ``available_carriers`` that needs a SO.
52
+ # see picking_form.py
53
+ "sale_stock",
54
+ # OCA/stock-logistics-workflow
55
+ "stock_move_line_qty_picked",
49
56
  ],
50
57
  "data": [
51
58
  "data/shopfloor_scenario_data.xml",
@@ -1,4 +1,3 @@
1
- from . import barcode_parser
2
1
  from . import change_package_lot
3
2
  from . import data
4
3
  from . import data_detail
@@ -65,7 +65,7 @@ class ChangePackageLot(Component):
65
65
  self, move_line, lot, response_ok_func, response_error_func
66
66
  ):
67
67
  previous_lot = move_line.lot_id
68
- previous_reserved_uom_qty = move_line.reserved_uom_qty
68
+ previous_reserved_qty = move_line.quantity
69
69
 
70
70
  inventory = self._actions_for("inventory")
71
71
 
@@ -79,9 +79,7 @@ class ChangePackageLot(Component):
79
79
  }
80
80
  )
81
81
  rounding = move_line.product_id.uom_id.rounding
82
- if float_is_zero(
83
- move_line.reserved_uom_qty, precision_rounding=rounding
84
- ):
82
+ if float_is_zero(move_line.quantity, precision_rounding=rounding):
85
83
  # The lot is not found at all, but the user scanned it, which means
86
84
  # it's an error in the stock data!
87
85
  raise InventoryError("Lot not available")
@@ -108,8 +106,8 @@ class ChangePackageLot(Component):
108
106
  message = self.msg_store.lot_replaced_by_lot(previous_lot, lot)
109
107
  if (
110
108
  float_compare(
111
- move_line.reserved_uom_qty,
112
- previous_reserved_uom_qty,
109
+ move_line.quantity,
110
+ previous_reserved_qty,
113
111
  precision_rounding=rounding,
114
112
  )
115
113
  != 0
@@ -217,8 +217,8 @@ class DataAction(Component):
217
217
  def _move_line_parser(self):
218
218
  return [
219
219
  "id",
220
- "qty_done",
221
- "reserved_uom_qty:quantity",
220
+ "qty_picked:qty_done",
221
+ "quantity",
222
222
  ("product_id:product", self._product_parser),
223
223
  ("lot_id:lot", self._lot_parser),
224
224
  ("location_id:location_src", self._location_parser),
@@ -227,7 +227,8 @@ class DataAction(Component):
227
227
  "move_id:priority",
228
228
  lambda rec, fname: rec.move_id.priority or "",
229
229
  ),
230
- "progress",
230
+ # TODO: progress is not available on move lines anymore, what to do for UI?
231
+ # "progress",
231
232
  ]
232
233
 
233
234
  @ensure_model("stock.move")
@@ -243,7 +244,7 @@ class DataAction(Component):
243
244
  def _move_parser(self):
244
245
  return [
245
246
  "id",
246
- "quantity_done",
247
+ "quantity_picked:quantity_done",
247
248
  "product_uom_qty:quantity",
248
249
  ("product_id:product", self._product_parser),
249
250
  ("location_id:location_src", self._location_parser),
@@ -357,8 +358,8 @@ class DataAction(Component):
357
358
  operations_to_do = 0
358
359
  operations_done = 0
359
360
  for line in lines:
360
- operations_done += line.qty_done
361
- operations_to_do += line.reserved_uom_qty - line.qty_done
361
+ operations_done += line.qty_picked
362
+ operations_to_do += line.quantity - line.qty_picked
362
363
  return {
363
364
  "done": operations_done,
364
365
  "to_do": operations_to_do,
@@ -101,7 +101,7 @@ class InventoryAction(Component):
101
101
  other_lines = self._stock_issue_get_related_move_lines(
102
102
  move, location, package, lot
103
103
  )
104
- qty_to_keep = sum(other_lines.mapped("reserved_qty"))
104
+ qty_to_keep = sum(other_lines.mapped("quantity_product_uom"))
105
105
  self.create_stock_correction(move, location, package, lot, qty_to_keep)
106
106
  move._action_assign()
107
107
 
@@ -754,7 +754,7 @@ class MessageAction(Component):
754
754
  "(%(product_name)s : %(quantity_done)s > %(quantity_reserved)s)",
755
755
  product_name=line.product_id.name,
756
756
  quantity_done=str(line.qty_done),
757
- quantity_reserved=str(line.reserved_uom_qty),
757
+ quantity_reserved=str(line.quantity),
758
758
  ),
759
759
  }
760
760
 
@@ -81,7 +81,7 @@ class MoveLineSearch(Component):
81
81
  the domain will not be filtered on any picking type.
82
82
  """
83
83
  domain = [
84
- ("qty_done", "=", 0),
84
+ ("qty_picked", "=", 0),
85
85
  ("state", "in", ("assigned", "partially_available")),
86
86
  ]
87
87
  picking_types = picking_type if picking_type is not None else self.picking_types
@@ -8,8 +8,7 @@ from odoo.addons.component.core import Component
8
8
 
9
9
 
10
10
  class SearchResult:
11
-
12
- __slots__ = ("record", "type", "code", "parse_result")
11
+ __slots__ = ("record", "type", "code")
13
12
 
14
13
  def __init__(self, **kw) -> None:
15
14
  for k in self.__slots__:
@@ -45,12 +44,6 @@ class SearchAction(Component):
45
44
 
46
45
  _inherit = "shopfloor.search.action"
47
46
 
48
- @property
49
- def parser(self):
50
- parser = self._actions_for("barcode")
51
- parser.search_action = self
52
- return parser
53
-
54
47
  @property
55
48
  def _barcode_type_handler(self):
56
49
  return {
@@ -64,8 +57,6 @@ class SearchAction(Component):
64
57
  "packaging": self.packaging_from_scan,
65
58
  "delivery_packaging": self.delivery_packaging_from_scan,
66
59
  "origin_move": self.origin_move_from_scan,
67
- # Extra data can be contained in barcodes
68
- "expiration_date": self.expiration_date_from_scan,
69
60
  }
70
61
 
71
62
  def _make_search_result(self, **kwargs):
@@ -81,7 +72,8 @@ class SearchAction(Component):
81
72
 
82
73
  Plain barcodes
83
74
  """
84
- barcode = barcode or ""
75
+ if not barcode or isinstance(barcode, str) and not barcode.strip():
76
+ return self._make_search_result(type="none")
85
77
  return self.generic_find(barcode, types=types, handler_kw=handler_kw)
86
78
 
87
79
  def _find_record_by_type(self, barcode, btype, handler_kw=None):
@@ -94,20 +86,11 @@ class SearchAction(Component):
94
86
  def generic_find(self, barcode, types=None, handler_kw=None):
95
87
  _types = types or self._barcode_type_handler.keys()
96
88
  # TODO: decide the best default order in case we don't pass `types`
97
- parse_results = self.parser.parse(barcode, types)
98
- for parse_result in parse_results:
99
- for btype in _types:
100
- record = self._find_record_by_type(
101
- parse_result.value, btype, handler_kw
102
- )
103
- if record:
104
- return self._make_search_result(
105
- record=record,
106
- code=barcode,
107
- type=btype,
108
- parse_result=parse_results,
109
- )
110
- return self._make_search_result(type="none", parse_result=parse_results)
89
+ for btype in _types:
90
+ record = self._find_record_by_type(barcode, btype, handler_kw)
91
+ if record:
92
+ return self._make_search_result(record=record, code=barcode, type=btype)
93
+ return self._make_search_result(type="none")
111
94
 
112
95
  def location_from_scan(self, barcode, limit=1):
113
96
  model = self.env["stock.location"]
@@ -206,10 +189,3 @@ class SearchAction(Component):
206
189
  if extra_domain:
207
190
  outgoing_move_domain = AND([outgoing_move_domain, extra_domain])
208
191
  return model.search(outgoing_move_domain)
209
-
210
- def dummy_from_scan(self, barcode):
211
- return None
212
-
213
- def expiration_date_from_scan(self, barcode):
214
- # TODO
215
- return None
@@ -26,9 +26,10 @@ class StockAction(Component):
26
26
  ):
27
27
  continue
28
28
  if move.state in ("partially_available", "assigned"):
29
- quantity -= sum(move.move_line_ids.mapped("reserved_qty"))
29
+ # TODO: Add a test hitting this line
30
+ quantity -= sum(move.move_line_ids.mapped("quantity"))
30
31
  elif move.state in ("done"):
31
- quantity -= move.product_uom_qty
32
+ quantity -= move.quantity
32
33
  return float_round(
33
34
  quantity, precision_rounding=origin_move.product_id.uom_id.rounding
34
35
  )
@@ -116,7 +117,7 @@ class StockAction(Component):
116
117
  check_user=False,
117
118
  split=True,
118
119
  ):
119
- """Set the qty_done and extract lines in new order"""
120
+ """Set the picked quantity and extract lines in new order"""
120
121
  user = user or self.env.user
121
122
  if check_user:
122
123
  picking_users = move_lines.picking_id.user_id
@@ -125,17 +126,16 @@ class StockAction(Component):
125
126
  _("Someone is already working on these transfers")
126
127
  )
127
128
  for line in move_lines:
128
- qty_done = quantity if quantity is not None else line.reserved_uom_qty
129
- line.qty_done = qty_done
130
129
  if split:
131
130
  line._split_partial_quantity()
132
131
  data = {
133
132
  "shopfloor_user_id": user.id,
133
+ "qty_picked": quantity or line.quantity,
134
134
  }
135
135
  if package:
136
136
  # destination package is set to the scanned one
137
137
  data["result_package_id"] = package.id
138
- line.write(data)
138
+ line.update(data)
139
139
  values_assigned = {
140
140
  "user_id": user.id,
141
141
  "printed": True,
@@ -156,7 +156,8 @@ class StockAction(Component):
156
156
  move_lines.write(
157
157
  {
158
158
  "shopfloor_user_id": False,
159
- "qty_done": 0,
159
+ "picked": False,
160
+ "qty_picked": 0,
160
161
  "result_package_id": False,
161
162
  }
162
163
  )
@@ -535,11 +535,6 @@ msgstr ""
535
535
  msgid "Inventory Locations"
536
536
  msgstr ""
537
537
 
538
- #. module: shopfloor
539
- #: model:ir.model.fields,field_description:shopfloor.field_stock_picking__is_shopfloor_created
540
- msgid "Is Shopfloor Created"
541
- msgstr ""
542
-
543
538
  #. module: shopfloor
544
539
  #. odoo-python
545
540
  #: code:addons/shopfloor/actions/completion_info.py:0
@@ -531,11 +531,6 @@ msgstr ""
531
531
  msgid "Inventory Locations"
532
532
  msgstr ""
533
533
 
534
- #. module: shopfloor
535
- #: model:ir.model.fields,field_description:shopfloor.field_stock_picking__is_shopfloor_created
536
- msgid "Is Shopfloor Created"
537
- msgstr ""
538
-
539
534
  #. module: shopfloor
540
535
  #. odoo-python
541
536
  #: code:addons/shopfloor/actions/completion_info.py:0
@@ -577,11 +577,6 @@ msgstr "No se permite ignorar el almacenamiento no encontrado para el menú {}."
577
577
  msgid "Inventory Locations"
578
578
  msgstr "Ubicaciones de Inventario"
579
579
 
580
- #. module: shopfloor
581
- #: model:ir.model.fields,field_description:shopfloor.field_stock_picking__is_shopfloor_created
582
- msgid "Is Shopfloor Created"
583
- msgstr ""
584
-
585
580
  #. module: shopfloor
586
581
  #. odoo-python
587
582
  #: code:addons/shopfloor/actions/completion_info.py:0
@@ -6,7 +6,7 @@ msgid ""
6
6
  msgstr ""
7
7
  "Project-Id-Version: Odoo Server 14.0\n"
8
8
  "Report-Msgid-Bugs-To: \n"
9
- "PO-Revision-Date: 2025-07-22 11:25+0000\n"
9
+ "PO-Revision-Date: 2025-05-28 10:54+0000\n"
10
10
  "Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
11
11
  "Language-Team: none\n"
12
12
  "Language: it\n"
@@ -142,8 +142,7 @@ msgstr ""
142
142
  #, python-format
143
143
  msgid ""
144
144
  "%(message_code)s not found in the current transfer or already in a package."
145
- msgstr ""
146
- "%(message_code)s non trovato nel trasferimento attuale o già nel collo."
145
+ msgstr "%(message_code)s non trovato nel trasferimento attuale o già nel collo."
147
146
 
148
147
  #. module: shopfloor
149
148
  #. odoo-python
@@ -613,11 +612,6 @@ msgstr "Ignorare inoltro non trovato non è consentito per il menu {}."
613
612
  msgid "Inventory Locations"
614
613
  msgstr "Ubicazioni di inventario"
615
614
 
616
- #. module: shopfloor
617
- #: model:ir.model.fields,field_description:shopfloor.field_stock_picking__is_shopfloor_created
618
- msgid "Is Shopfloor Created"
619
- msgstr "Il reparto è creato"
620
-
621
615
  #. module: shopfloor
622
616
  #. odoo-python
623
617
  #: code:addons/shopfloor/actions/completion_info.py:0
@@ -531,11 +531,6 @@ msgstr ""
531
531
  msgid "Inventory Locations"
532
532
  msgstr ""
533
533
 
534
- #. module: shopfloor
535
- #: model:ir.model.fields,field_description:shopfloor.field_stock_picking__is_shopfloor_created
536
- msgid "Is Shopfloor Created"
537
- msgstr ""
538
-
539
534
  #. module: shopfloor
540
535
  #. odoo-python
541
536
  #: code:addons/shopfloor/actions/completion_info.py:0