odoo-addon-shopfloor 16.0.2.10.1__py3-none-any.whl → 16.0.2.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/shopfloor/README.rst +1 -1
- odoo/addons/shopfloor/__manifest__.py +1 -1
- odoo/addons/shopfloor/actions/__init__.py +1 -0
- odoo/addons/shopfloor/actions/barcode_parser.py +44 -0
- odoo/addons/shopfloor/actions/search.py +31 -6
- odoo/addons/shopfloor/actions/stock.py +21 -8
- odoo/addons/shopfloor/static/description/index.html +1 -1
- {odoo_addon_shopfloor-16.0.2.10.1.dist-info → odoo_addon_shopfloor-16.0.2.12.0.dist-info}/METADATA +2 -2
- {odoo_addon_shopfloor-16.0.2.10.1.dist-info → odoo_addon_shopfloor-16.0.2.12.0.dist-info}/RECORD +11 -10
- {odoo_addon_shopfloor-16.0.2.10.1.dist-info → odoo_addon_shopfloor-16.0.2.12.0.dist-info}/WHEEL +0 -0
- {odoo_addon_shopfloor-16.0.2.10.1.dist-info → odoo_addon_shopfloor-16.0.2.12.0.dist-info}/top_level.txt +0 -0
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:c418f1851f7591fa3b9cde9ce01a2a3507baf0066f7453d93cfea051273d85fc
|
15
15
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
16
16
|
|
17
17
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Copyright 2025 ACSONE SA/NV (https://www.acsone.eu)
|
2
|
+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
3
|
+
|
4
|
+
from odoo.addons.component.core import Component
|
5
|
+
|
6
|
+
from ..actions.search import SearchAction
|
7
|
+
|
8
|
+
|
9
|
+
class BarcodeResult:
|
10
|
+
|
11
|
+
__slots__ = ("type", "value", "raw")
|
12
|
+
|
13
|
+
def __init__(self, **kw) -> None:
|
14
|
+
for k in self.__slots__:
|
15
|
+
setattr(self, k, kw.get(k))
|
16
|
+
|
17
|
+
|
18
|
+
class BarcodeParser(Component):
|
19
|
+
"""
|
20
|
+
Some barcodes can have complex data structure
|
21
|
+
"""
|
22
|
+
|
23
|
+
_name = "shopfloor.barcode.parser"
|
24
|
+
_inherit = "shopfloor.process.action"
|
25
|
+
_usage = "barcode"
|
26
|
+
|
27
|
+
def __init__(self, search_action: SearchAction):
|
28
|
+
# Get search action keys
|
29
|
+
self.search_action = search_action
|
30
|
+
|
31
|
+
@property
|
32
|
+
def _authorized_barcode_types(self):
|
33
|
+
return self.search_action._barcode_type_handler.keys()
|
34
|
+
|
35
|
+
def parse(self, barcode, types) -> list[BarcodeResult]:
|
36
|
+
"""
|
37
|
+
This method will parse the barcode and return the
|
38
|
+
value with its type if determined.
|
39
|
+
|
40
|
+
Override this to implement specific parsing
|
41
|
+
|
42
|
+
"""
|
43
|
+
|
44
|
+
return [BarcodeResult(type="unknown", value=barcode, raw=barcode)]
|
@@ -8,7 +8,8 @@ from odoo.addons.component.core import Component
|
|
8
8
|
|
9
9
|
|
10
10
|
class SearchResult:
|
11
|
-
|
11
|
+
|
12
|
+
__slots__ = ("record", "type", "code", "parse_result")
|
12
13
|
|
13
14
|
def __init__(self, **kw) -> None:
|
14
15
|
for k in self.__slots__:
|
@@ -44,6 +45,12 @@ class SearchAction(Component):
|
|
44
45
|
|
45
46
|
_inherit = "shopfloor.search.action"
|
46
47
|
|
48
|
+
@property
|
49
|
+
def parser(self):
|
50
|
+
parser = self._actions_for("barcode")
|
51
|
+
parser.search_action = self
|
52
|
+
return parser
|
53
|
+
|
47
54
|
@property
|
48
55
|
def _barcode_type_handler(self):
|
49
56
|
return {
|
@@ -57,6 +64,8 @@ class SearchAction(Component):
|
|
57
64
|
"packaging": self.packaging_from_scan,
|
58
65
|
"delivery_packaging": self.delivery_packaging_from_scan,
|
59
66
|
"origin_move": self.origin_move_from_scan,
|
67
|
+
# Extra data can be contained in barcodes
|
68
|
+
"expiration_date": self.expiration_date_from_scan,
|
60
69
|
}
|
61
70
|
|
62
71
|
def _make_search_result(self, **kwargs):
|
@@ -85,11 +94,20 @@ class SearchAction(Component):
|
|
85
94
|
def generic_find(self, barcode, types=None, handler_kw=None):
|
86
95
|
_types = types or self._barcode_type_handler.keys()
|
87
96
|
# TODO: decide the best default order in case we don't pass `types`
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
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)
|
93
111
|
|
94
112
|
def location_from_scan(self, barcode, limit=1):
|
95
113
|
model = self.env["stock.location"]
|
@@ -188,3 +206,10 @@ class SearchAction(Component):
|
|
188
206
|
if extra_domain:
|
189
207
|
outgoing_move_domain = AND([outgoing_move_domain, extra_domain])
|
190
208
|
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
|
@@ -108,7 +108,13 @@ class StockAction(Component):
|
|
108
108
|
return picking.copy(return_values)
|
109
109
|
|
110
110
|
def mark_move_line_as_picked(
|
111
|
-
self,
|
111
|
+
self,
|
112
|
+
move_lines,
|
113
|
+
quantity=None,
|
114
|
+
package=None,
|
115
|
+
user=None,
|
116
|
+
check_user=False,
|
117
|
+
split=True,
|
112
118
|
):
|
113
119
|
"""Set the qty_done and extract lines in new order"""
|
114
120
|
user = user or self.env.user
|
@@ -121,7 +127,8 @@ class StockAction(Component):
|
|
121
127
|
for line in move_lines:
|
122
128
|
qty_done = quantity if quantity is not None else line.reserved_uom_qty
|
123
129
|
line.qty_done = qty_done
|
124
|
-
|
130
|
+
if split:
|
131
|
+
line._split_partial_quantity()
|
125
132
|
data = {
|
126
133
|
"shopfloor_user_id": user.id,
|
127
134
|
}
|
@@ -129,13 +136,19 @@ class StockAction(Component):
|
|
129
136
|
# destination package is set to the scanned one
|
130
137
|
data["result_package_id"] = package.id
|
131
138
|
line.write(data)
|
139
|
+
values_assigned = {
|
140
|
+
"user_id": user.id,
|
141
|
+
"printed": True,
|
142
|
+
}
|
132
143
|
# Extract the picked quantity in a split order and set current user
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
144
|
+
if split:
|
145
|
+
move_lines._extract_in_split_order(values_assigned)
|
146
|
+
else:
|
147
|
+
lines = move_lines.picking_id.filtered(
|
148
|
+
lambda picking: not picking.printed or not picking.user_id == user
|
149
|
+
)
|
150
|
+
if lines:
|
151
|
+
lines.write(values_assigned)
|
139
152
|
move_lines.picking_id.filtered(lambda p: p.user_id != user).user_id = user.id
|
140
153
|
|
141
154
|
def unmark_move_line_as_picked(self, move_lines):
|
@@ -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:
|
375
|
+
!! source digest: sha256:c418f1851f7591fa3b9cde9ce01a2a3507baf0066f7453d93cfea051273d85fc
|
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/wms/tree/16.0/shopfloor"><img alt="OCA/wms" src="https://img.shields.io/badge/github-OCA%2Fwms-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/wms-16-0/wms-16-0-shopfloor"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/wms&target_branch=16.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 operations.</p>
|
{odoo_addon_shopfloor-16.0.2.10.1.dist-info → odoo_addon_shopfloor-16.0.2.12.0.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: odoo-addon-shopfloor
|
3
|
-
Version: 16.0.2.
|
3
|
+
Version: 16.0.2.12.0
|
4
4
|
Summary: manage warehouse operations with barcode scanners
|
5
5
|
Home-page: https://github.com/OCA/wms
|
6
6
|
Author: Camptocamp, BCIM, Akretion, Odoo Community Association (OCA)
|
@@ -40,7 +40,7 @@ Shopfloor
|
|
40
40
|
!! This file is generated by oca-gen-addon-readme !!
|
41
41
|
!! changes will be overwritten. !!
|
42
42
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
43
|
-
!! source digest: sha256:
|
43
|
+
!! source digest: sha256:c418f1851f7591fa3b9cde9ce01a2a3507baf0066f7453d93cfea051273d85fc
|
44
44
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
45
45
|
|
46
46
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
{odoo_addon_shopfloor-16.0.2.10.1.dist-info → odoo_addon_shopfloor-16.0.2.12.0.dist-info}/RECORD
RENAMED
@@ -1,9 +1,10 @@
|
|
1
|
-
odoo/addons/shopfloor/README.rst,sha256=
|
1
|
+
odoo/addons/shopfloor/README.rst,sha256=UgZDCz4HK5OOLW_5n4GsL2AarZ-ues_g1A0_eGrLIhc,5483
|
2
2
|
odoo/addons/shopfloor/__init__.py,sha256=ke3RmZ7XkX-lz4S8NHAxNIEJ5_Nvj5bjBAqD-W-q73c,91
|
3
|
-
odoo/addons/shopfloor/__manifest__.py,sha256=
|
3
|
+
odoo/addons/shopfloor/__manifest__.py,sha256=SX-ZCT7UZrAlhaZxcKVH0h2dXnRHvEvpzE6zaVgxVnU,2246
|
4
4
|
odoo/addons/shopfloor/exceptions.py,sha256=81KpIGVkuYRhA0cIuml4pg4G3izqkAAhLqoXZbUd4X8,197
|
5
5
|
odoo/addons/shopfloor/utils.py,sha256=Be7J8Tu7ivOW4lpe8IjKxwqfTwfmK-ZkeFEavoYIIF4,375
|
6
|
-
odoo/addons/shopfloor/actions/__init__.py,sha256=
|
6
|
+
odoo/addons/shopfloor/actions/__init__.py,sha256=HhwibjwfE3oe7vIJtiUV0I7L2Z1bmoaqi7R5dElWhS0,429
|
7
|
+
odoo/addons/shopfloor/actions/barcode_parser.py,sha256=ngj5moIL9r6LD9Yt7NsXNvX2JeJAXL3G2lVzKI0-Y7k,1164
|
7
8
|
odoo/addons/shopfloor/actions/change_package_lot.py,sha256=-esK7FKHaXKGOwL8RON_yZCLwIEZWZqriHxtx99TO9k,7264
|
8
9
|
odoo/addons/shopfloor/actions/completion_info.py,sha256=Q_wlx8VJHOPFZbwGrxHBYa-gt04ZAXBsRBGh0aLuRrk,1483
|
9
10
|
odoo/addons/shopfloor/actions/data.py,sha256=TF02p2ksynxxOLnkAeqZWCcJVFOhRUQS45O4l5p-oNw,12856
|
@@ -16,8 +17,8 @@ odoo/addons/shopfloor/actions/packaging.py,sha256=uZxD1bisNS_8M5ZQAHuOz2MR6l26XH
|
|
16
17
|
odoo/addons/shopfloor/actions/savepoint.py,sha256=bIpPUPg-2BbO8hz277kWnq4DP_cayhAB_v8Rp2mUHjg,1143
|
17
18
|
odoo/addons/shopfloor/actions/schema.py,sha256=H_4HCaYB7HiqU35WO2NmHtOLJ087iFLbiJD4HdiHFjU,8555
|
18
19
|
odoo/addons/shopfloor/actions/schema_detail.py,sha256=_xtm8ptRXAPBIMTyr8XKMQtogcjBudh-QRqKUZEEHGU,4968
|
19
|
-
odoo/addons/shopfloor/actions/search.py,sha256=
|
20
|
-
odoo/addons/shopfloor/actions/stock.py,sha256=
|
20
|
+
odoo/addons/shopfloor/actions/search.py,sha256=R2ZiugKCD6VekDGs_UZyrUI3AUCdJ387IZ4lco45A8w,7619
|
21
|
+
odoo/addons/shopfloor/actions/stock.py,sha256=5TUJa--aFlD5Y_atRQvWzbzicUrnE8CHd4v6xuZg6dY,11109
|
21
22
|
odoo/addons/shopfloor/actions/stock_unreserve.py,sha256=P0a9V53MqG4sDln8yX0Id-nEXz7cydiFY_BBznioQpg,3090
|
22
23
|
odoo/addons/shopfloor/components/__init__.py,sha256=a3ox1WOD1JhrQUrYMRn-yDJI0Vvc7ciKdmXuZB29ToU,173
|
23
24
|
odoo/addons/shopfloor/components/scan_handler_location.py,sha256=LImiaG4L4xBKUFWZLSnJV-eSCvj_NCDCM5GqZSnsPmE,825
|
@@ -85,7 +86,7 @@ odoo/addons/shopfloor/services/zone_picking.py,sha256=9GFw2AKBFFci8Erb8UyTAYuCI9
|
|
85
86
|
odoo/addons/shopfloor/services/forms/__init__.py,sha256=nxwJdKX47hb56ERf4Qb3UE5dkdsHCbkaXMAXs4XMAd8,27
|
86
87
|
odoo/addons/shopfloor/services/forms/picking_form.py,sha256=F15G5yw78Pd1WgPjMz00-K1JyGaTdfdvVYzG4Dubpqk,2626
|
87
88
|
odoo/addons/shopfloor/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
|
88
|
-
odoo/addons/shopfloor/static/description/index.html,sha256=
|
89
|
+
odoo/addons/shopfloor/static/description/index.html,sha256=G43IO-oa2cGIv7agAu0lFpVbC53uYGa95I1LP8lkfUM,17775
|
89
90
|
odoo/addons/shopfloor/tests/__init__.py,sha256=4WHuLVjOX_lndDJyuyGcreNckArFJL2HA5PPFlhT6FM,3962
|
90
91
|
odoo/addons/shopfloor/tests/common.py,sha256=nU-1CYbAi2hoI2jFIcw6udgl1ave_IGJciyOZ9DeiAE,11610
|
91
92
|
odoo/addons/shopfloor/tests/models.py,sha256=PWNPC6DgFMbrarojSxUqwycnBdePX-4Q5Z0rn1WwQqY,940
|
@@ -187,7 +188,7 @@ odoo/addons/shopfloor/views/shopfloor_menu.xml,sha256=rKXjj0Jk8gjda1y1B6d1_s3sn0
|
|
187
188
|
odoo/addons/shopfloor/views/stock_location.xml,sha256=d7iqbOQZbb5YPSdAXlQ6spcj8dUvQ37DpEGuaLX5B1M,829
|
188
189
|
odoo/addons/shopfloor/views/stock_move_line.xml,sha256=tn3pV67aRoYmn3qkm3aSgdYArY-z9SIrl_4fpJFy3Jo,1984
|
189
190
|
odoo/addons/shopfloor/views/stock_picking_type.xml,sha256=Ckn2835hO4HtuZQX9x3382C4gs789fb94Cx0444mBkc,800
|
190
|
-
odoo_addon_shopfloor-16.0.2.
|
191
|
-
odoo_addon_shopfloor-16.0.2.
|
192
|
-
odoo_addon_shopfloor-16.0.2.
|
193
|
-
odoo_addon_shopfloor-16.0.2.
|
191
|
+
odoo_addon_shopfloor-16.0.2.12.0.dist-info/METADATA,sha256=dF9chlSU77c5UiwWQQ8YipWPOdPCZHg5I_81NKfxF3A,6927
|
192
|
+
odoo_addon_shopfloor-16.0.2.12.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
193
|
+
odoo_addon_shopfloor-16.0.2.12.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
|
194
|
+
odoo_addon_shopfloor-16.0.2.12.0.dist-info/RECORD,,
|
{odoo_addon_shopfloor-16.0.2.10.1.dist-info → odoo_addon_shopfloor-16.0.2.12.0.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|