odoo-addon-shopfloor 16.0.2.12.0.1__py3-none-any.whl → 18.0.0.1.0.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/shopfloor/README.rst +79 -52
- odoo/addons/shopfloor/__manifest__.py +11 -4
- odoo/addons/shopfloor/actions/__init__.py +0 -1
- odoo/addons/shopfloor/actions/change_package_lot.py +4 -6
- odoo/addons/shopfloor/actions/data.py +7 -6
- odoo/addons/shopfloor/actions/inventory.py +1 -1
- odoo/addons/shopfloor/actions/message.py +1 -1
- odoo/addons/shopfloor/actions/move_line_search.py +1 -1
- odoo/addons/shopfloor/actions/search.py +8 -32
- odoo/addons/shopfloor/actions/stock.py +7 -6
- odoo/addons/shopfloor/i18n/ca.po +0 -5
- odoo/addons/shopfloor/i18n/de.po +0 -5
- odoo/addons/shopfloor/i18n/es_AR.po +0 -5
- odoo/addons/shopfloor/i18n/it.po +2 -8
- odoo/addons/shopfloor/i18n/pt_BR.po +0 -5
- odoo/addons/shopfloor/i18n/shopfloor.pot +7 -194
- odoo/addons/shopfloor/models/stock_location.py +5 -5
- odoo/addons/shopfloor/models/stock_move.py +24 -7
- odoo/addons/shopfloor/models/stock_move_line.py +29 -82
- odoo/addons/shopfloor/models/stock_picking.py +8 -6
- odoo/addons/shopfloor/models/stock_quant_package.py +2 -2
- odoo/addons/shopfloor/readme/CONTRIBUTORS.md +17 -0
- odoo/addons/shopfloor/readme/CREDITS.md +5 -0
- odoo/addons/shopfloor/readme/DESCRIPTION.md +37 -0
- odoo/addons/shopfloor/readme/{HISTORY.rst → HISTORY.md} +1 -2
- odoo/addons/shopfloor/readme/ROADMAP.md +10 -0
- odoo/addons/shopfloor/readme/USAGE.md +6 -0
- odoo/addons/shopfloor/services/checkout.py +9 -9
- odoo/addons/shopfloor/services/cluster_picking.py +2 -2
- odoo/addons/shopfloor/services/delivery.py +4 -6
- odoo/addons/shopfloor/services/forms/picking_form.py +4 -1
- odoo/addons/shopfloor/services/location_content_transfer.py +1 -1
- odoo/addons/shopfloor/services/single_pack_transfer.py +1 -1
- odoo/addons/shopfloor/services/zone_picking.py +5 -9
- odoo/addons/shopfloor/static/description/index.html +41 -18
- odoo/addons/shopfloor/tests/__init__.py +74 -73
- odoo/addons/shopfloor/tests/common.py +9 -9
- odoo/addons/shopfloor/tests/test_actions_change_package_lot.py +104 -71
- odoo/addons/shopfloor/tests/test_actions_data.py +17 -21
- odoo/addons/shopfloor/tests/test_actions_data_base.py +9 -3
- odoo/addons/shopfloor/tests/test_actions_data_detail.py +17 -19
- odoo/addons/shopfloor/tests/test_actions_search.py +2 -1
- odoo/addons/shopfloor/tests/test_actions_stock.py +0 -1
- odoo/addons/shopfloor/tests/test_checkout_auto_post.py +3 -3
- odoo/addons/shopfloor/tests/test_checkout_base.py +1 -1
- odoo/addons/shopfloor/tests/test_checkout_list_delivery_packaging.py +1 -1
- odoo/addons/shopfloor/tests/test_checkout_list_package.py +4 -4
- odoo/addons/shopfloor/tests/test_checkout_new_package.py +3 -3
- odoo/addons/shopfloor/tests/test_checkout_no_package.py +3 -3
- odoo/addons/shopfloor/tests/test_checkout_scan_dest_location.py +1 -1
- odoo/addons/shopfloor/tests/test_checkout_scan_package_action.py +11 -11
- odoo/addons/shopfloor/tests/test_checkout_select_package_base.py +1 -1
- odoo/addons/shopfloor/tests/test_checkout_set_qty.py +17 -17
- odoo/addons/shopfloor/tests/test_checkout_summary.py +2 -2
- odoo/addons/shopfloor/tests/test_cluster_picking_base.py +1 -1
- odoo/addons/shopfloor/tests/test_cluster_picking_batch.py +2 -2
- odoo/addons/shopfloor/tests/test_cluster_picking_change_pack_lot.py +1 -1
- odoo/addons/shopfloor/tests/test_cluster_picking_is_zero.py +1 -1
- odoo/addons/shopfloor/tests/test_cluster_picking_scan_destination.py +17 -19
- odoo/addons/shopfloor/tests/test_cluster_picking_scan_line_no_prefill_qty.py +1 -1
- odoo/addons/shopfloor/tests/test_cluster_picking_stock_issue.py +5 -5
- odoo/addons/shopfloor/tests/test_delivery_base.py +4 -6
- odoo/addons/shopfloor/tests/test_delivery_done.py +1 -1
- odoo/addons/shopfloor/tests/test_delivery_reset_qty_done_line.py +1 -1
- odoo/addons/shopfloor/tests/test_delivery_reset_qty_done_pack.py +1 -1
- odoo/addons/shopfloor/tests/test_delivery_scan_deliver.py +6 -6
- odoo/addons/shopfloor/tests/test_location_content_transfer_base.py +2 -2
- odoo/addons/shopfloor/tests/test_location_content_transfer_mix.py +8 -8
- odoo/addons/shopfloor/tests/test_location_content_transfer_set_destination_package_or_line.py +41 -41
- odoo/addons/shopfloor/tests/test_location_content_transfer_single.py +3 -3
- odoo/addons/shopfloor/tests/test_menu_base.py +4 -4
- odoo/addons/shopfloor/tests/test_move_action_assign.py +19 -4
- odoo/addons/shopfloor/tests/test_single_pack_transfer.py +3 -3
- odoo/addons/shopfloor/tests/test_stock_split.py +77 -17
- odoo/addons/shopfloor/tests/test_zone_picking_base.py +5 -5
- odoo/addons/shopfloor/tests/test_zone_picking_change_pack_lot.py +2 -2
- odoo/addons/shopfloor/tests/test_zone_picking_complete_mix_pack_flux.py +2 -2
- odoo/addons/shopfloor/tests/test_zone_picking_require_destination_package.py +3 -3
- odoo/addons/shopfloor/tests/test_zone_picking_select_line.py +4 -4
- odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination.py +29 -29
- odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_package_not_allowed.py +2 -2
- odoo/addons/shopfloor/tests/test_zone_picking_set_line_destination_pick_pack.py +12 -12
- odoo/addons/shopfloor/tests/test_zone_picking_start.py +1 -1
- odoo/addons/shopfloor/tests/test_zone_picking_unload_all.py +12 -12
- odoo/addons/shopfloor/tests/test_zone_picking_unload_buffer_lines.py +4 -4
- odoo/addons/shopfloor/tests/test_zone_picking_unload_set_destination.py +10 -10
- odoo/addons/shopfloor/tests/test_zone_picking_unload_single.py +3 -3
- odoo/addons/shopfloor/views/shopfloor_menu.xml +33 -102
- odoo/addons/shopfloor/views/stock_move_line.xml +2 -2
- odoo/addons/shopfloor/views/stock_picking_type.xml +1 -1
- odoo_addon_shopfloor-18.0.0.1.0.15.dist-info/METADATA +222 -0
- {odoo_addon_shopfloor-16.0.2.12.0.1.dist-info → odoo_addon_shopfloor-18.0.0.1.0.15.dist-info}/RECORD +94 -98
- {odoo_addon_shopfloor-16.0.2.12.0.1.dist-info → odoo_addon_shopfloor-18.0.0.1.0.15.dist-info}/WHEEL +1 -1
- odoo_addon_shopfloor-18.0.0.1.0.15.dist-info/top_level.txt +1 -0
- odoo/addons/shopfloor/actions/barcode_parser.py +0 -44
- odoo/addons/shopfloor/migrations/16.0.2.0.0/post-migration.py +0 -41
- odoo/addons/shopfloor/migrations/16.0.2.4.2/post-init_search_move_line_options.py +0 -33
- odoo/addons/shopfloor/migrations/16.0.2.4.2/post-migration.py +0 -29
- odoo/addons/shopfloor/readme/CONTRIBUTORS.rst +0 -18
- odoo/addons/shopfloor/readme/CREDITS.rst +0 -5
- odoo/addons/shopfloor/readme/DESCRIPTION.rst +0 -17
- odoo/addons/shopfloor/readme/ROADMAP.rst +0 -4
- odoo/addons/shopfloor/readme/USAGE.rst +0 -6
- odoo_addon_shopfloor-16.0.2.12.0.1.dist-info/METADATA +0 -193
- odoo_addon_shopfloor-16.0.2.12.0.1.dist-info/top_level.txt +0 -1
odoo/addons/shopfloor/README.rst
CHANGED
@@ -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:
|
14
|
+
!! source digest: sha256:f606f7cc780de1cd3fdafa4a5de793b9705110e5067af79704c8c5529fa80090
|
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%
|
24
|
-
:target: https://github.com/OCA/
|
25
|
-
:alt: OCA/
|
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/
|
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/
|
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
|
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
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
47
|
-
to consume the backend APIs and provide screens for users on
|
48
|
-
A default front-end application is provided by
|
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,
|
51
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
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/
|
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/
|
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
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
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
|
-
|
124
|
-
|
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
|
-
|
132
|
-
|
133
|
-
|
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/
|
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": "
|
9
|
+
"version": "18.0.0.1.0",
|
10
10
|
"development_status": "Beta",
|
11
11
|
"category": "Inventory",
|
12
|
-
"website": "https://github.com/OCA/
|
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
|
-
"
|
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
|
-
|
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",
|
@@ -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
|
-
|
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.
|
112
|
-
|
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
|
-
"
|
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
|
-
|
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.
|
361
|
-
operations_to_do += line.
|
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("
|
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.
|
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
|
-
("
|
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
|
-
|
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
|
-
|
98
|
-
|
99
|
-
|
100
|
-
record =
|
101
|
-
|
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
|
-
|
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.
|
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
|
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,11 +126,10 @@ 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 = {
|
132
|
+
"picked": True,
|
133
133
|
"shopfloor_user_id": user.id,
|
134
134
|
}
|
135
135
|
if package:
|
@@ -156,7 +156,8 @@ class StockAction(Component):
|
|
156
156
|
move_lines.write(
|
157
157
|
{
|
158
158
|
"shopfloor_user_id": False,
|
159
|
-
"
|
159
|
+
"picked": False,
|
160
|
+
"qty_picked": 0,
|
160
161
|
"result_package_id": False,
|
161
162
|
}
|
162
163
|
)
|
odoo/addons/shopfloor/i18n/ca.po
CHANGED
@@ -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
|
odoo/addons/shopfloor/i18n/de.po
CHANGED
@@ -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
|
odoo/addons/shopfloor/i18n/it.po
CHANGED
@@ -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-
|
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
|