odoo-addon-shopfloor 16.0.2.2.1.5__py3-none-any.whl → 16.0.2.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/shopfloor/README.rst +1 -1
- odoo/addons/shopfloor/__manifest__.py +1 -1
- odoo/addons/shopfloor/actions/data_detail.py +71 -1
- odoo/addons/shopfloor/actions/schema_detail.py +37 -0
- odoo/addons/shopfloor/i18n/it.po +27 -11
- odoo/addons/shopfloor/static/description/index.html +1 -1
- odoo/addons/shopfloor/tests/test_actions_data_base.py +41 -0
- odoo/addons/shopfloor/tests/test_actions_data_detail.py +3 -2
- {odoo_addon_shopfloor-16.0.2.2.1.5.dist-info → odoo_addon_shopfloor-16.0.2.3.0.dist-info}/METADATA +2 -2
- {odoo_addon_shopfloor-16.0.2.2.1.5.dist-info → odoo_addon_shopfloor-16.0.2.3.0.dist-info}/RECORD +12 -12
- {odoo_addon_shopfloor-16.0.2.2.1.5.dist-info → odoo_addon_shopfloor-16.0.2.3.0.dist-info}/WHEEL +0 -0
- {odoo_addon_shopfloor-16.0.2.2.1.5.dist-info → odoo_addon_shopfloor-16.0.2.3.0.dist-info}/top_level.txt +0 -0
odoo/addons/shopfloor/README.rst
CHANGED
@@ -7,7 +7,7 @@ Shopfloor
|
|
7
7
|
!! This file is generated by oca-gen-addon-readme !!
|
8
8
|
!! changes will be overwritten. !!
|
9
9
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
10
|
-
!! source digest: sha256:
|
10
|
+
!! source digest: sha256:4c4dc0050165bd957675ce9d57514bb2868133060d042e37d9ef7cba29c9fd6b
|
11
11
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
12
12
|
|
13
13
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# Copyright 2020 Camptocamp SA (http://www.camptocamp.com)
|
2
2
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
3
|
+
from collections import defaultdict
|
4
|
+
|
3
5
|
from odoo.tools.float_utils import float_round
|
4
6
|
|
5
7
|
from odoo.addons.component.core import Component
|
@@ -24,12 +26,47 @@ class DataDetailAction(Component):
|
|
24
26
|
def _location_detail_parser(self):
|
25
27
|
return self._location_parser + [
|
26
28
|
"complete_name",
|
29
|
+
(
|
30
|
+
"quant_ids:products",
|
31
|
+
lambda record, fname: self._location_content(record),
|
32
|
+
),
|
27
33
|
(
|
28
34
|
"reserved_move_line_ids:reserved_move_lines",
|
29
35
|
lambda record, fname: self.move_lines(record[fname]),
|
30
36
|
),
|
31
37
|
]
|
32
38
|
|
39
|
+
def _location_content(self, record):
|
40
|
+
res = []
|
41
|
+
product_qties = defaultdict(lambda: defaultdict(lambda: 0))
|
42
|
+
for quant in record.quant_ids:
|
43
|
+
product_qties[quant.product_id][quant.lot_id] += quant.quantity
|
44
|
+
for product, quants_qty in product_qties.items():
|
45
|
+
val = self.product(product)
|
46
|
+
lots = []
|
47
|
+
val["lots"] = lots
|
48
|
+
qty_total = 0
|
49
|
+
for lot, qty in quants_qty.items():
|
50
|
+
qty_total += qty
|
51
|
+
if not lot:
|
52
|
+
continue
|
53
|
+
lot_val = self._location_lot(lot)
|
54
|
+
lot_val["quantity"] = qty
|
55
|
+
lots.append(lot_val)
|
56
|
+
val["quantity"] = qty_total
|
57
|
+
res.append(val)
|
58
|
+
return res
|
59
|
+
|
60
|
+
def _location_lot(self, record, **kw):
|
61
|
+
# Define a new method to not overload the base one which is used in many places
|
62
|
+
return self._jsonify(record, self._location_lot_detail_parser, **kw)
|
63
|
+
|
64
|
+
@property
|
65
|
+
def _location_lot_detail_parser(self):
|
66
|
+
return self._lot_parser + [
|
67
|
+
"removal_date",
|
68
|
+
]
|
69
|
+
|
33
70
|
@ensure_model("stock.picking")
|
34
71
|
def picking_detail(self, record, **kw):
|
35
72
|
parser = self._picking_detail_parser
|
@@ -92,7 +129,6 @@ class DataDetailAction(Component):
|
|
92
129
|
def _lot_detail_parser(self):
|
93
130
|
return self._lot_parser + [
|
94
131
|
"removal_date",
|
95
|
-
"expiration_date:expire_date",
|
96
132
|
(
|
97
133
|
"product_id:product",
|
98
134
|
lambda record, fname: self.product_detail(record[fname]),
|
@@ -131,6 +167,10 @@ class DataDetailAction(Component):
|
|
131
167
|
def _product_detail_parser(self):
|
132
168
|
return self._product_parser + [
|
133
169
|
("image_128:image", self._product_image_url),
|
170
|
+
(
|
171
|
+
"stock_quant_ids:locations",
|
172
|
+
lambda record, fname: self._locations_for_product(record),
|
173
|
+
),
|
134
174
|
(
|
135
175
|
"product_tmpl_id:manufacturer",
|
136
176
|
lambda rec, fname: self._jsonify(
|
@@ -139,6 +179,36 @@ class DataDetailAction(Component):
|
|
139
179
|
),
|
140
180
|
]
|
141
181
|
|
182
|
+
def _get_product_locations(self, record):
|
183
|
+
# Retrieve all products -- maybe more than one location
|
184
|
+
product_template = record.product_tmpl_id
|
185
|
+
products = product_template.product_variant_ids
|
186
|
+
quants = self.env["stock.quant"].search(
|
187
|
+
[("product_id", "in", products.ids), ("location_id.usage", "=", "internal")]
|
188
|
+
)
|
189
|
+
return quants.location_id
|
190
|
+
|
191
|
+
def _locations_for_product(self, record):
|
192
|
+
res = []
|
193
|
+
for location in self._get_product_locations(record):
|
194
|
+
quants = location.quant_ids.filtered(lambda q: q.product_id == record)
|
195
|
+
loc = self.location(location)
|
196
|
+
loc["complete_name"] = location.complete_name
|
197
|
+
loc["quantity"] = sum(quants.mapped("quantity"))
|
198
|
+
lots = []
|
199
|
+
quants_lot_qty = defaultdict(lambda: 0)
|
200
|
+
for quant in quants:
|
201
|
+
quants_lot_qty[quant.lot_id] += quant.quantity
|
202
|
+
for lot, qty in quants_lot_qty.items():
|
203
|
+
if not lot:
|
204
|
+
continue
|
205
|
+
lot_val = self._location_lot(lot)
|
206
|
+
lot_val["quantity"] = qty
|
207
|
+
lots.append(lot_val)
|
208
|
+
loc["lots"] = lots
|
209
|
+
res.append(loc)
|
210
|
+
return res
|
211
|
+
|
142
212
|
def _product_image_url(self, record, field_name):
|
143
213
|
if not record[field_name]:
|
144
214
|
return None
|
@@ -16,6 +16,27 @@ class ShopfloorSchemaDetailAction(Component):
|
|
16
16
|
"required": True,
|
17
17
|
},
|
18
18
|
"reserved_move_lines": self._schema_list_of(self.move_line()),
|
19
|
+
"products": self._schema_list_of(self.location_product()),
|
20
|
+
}
|
21
|
+
)
|
22
|
+
return schema
|
23
|
+
|
24
|
+
def location_product(self):
|
25
|
+
schema = self.product()
|
26
|
+
schema.update(
|
27
|
+
{
|
28
|
+
"quantity": {"type": "float", "required": True},
|
29
|
+
"lots": self._schema_list_of(self.location_lot()),
|
30
|
+
}
|
31
|
+
)
|
32
|
+
return schema
|
33
|
+
|
34
|
+
def location_lot(self):
|
35
|
+
schema = self.lot()
|
36
|
+
schema.update(
|
37
|
+
{
|
38
|
+
"removal_date": {"type": "string", "nullable": True, "required": False},
|
39
|
+
"quantity": {"type": "float", "required": True},
|
19
40
|
}
|
20
41
|
)
|
21
42
|
return schema
|
@@ -76,6 +97,22 @@ class ShopfloorSchemaDetailAction(Component):
|
|
76
97
|
"image": {"type": "string", "nullable": True, "required": False},
|
77
98
|
"manufacturer": self._schema_dict_of(self._simple_record()),
|
78
99
|
"suppliers": self._schema_list_of(self.product_supplierinfo()),
|
100
|
+
"locations": self._schema_list_of(self.product_location()),
|
101
|
+
}
|
102
|
+
)
|
103
|
+
return schema
|
104
|
+
|
105
|
+
def product_location(self):
|
106
|
+
schema = self.location()
|
107
|
+
schema.update(
|
108
|
+
{
|
109
|
+
"complete_name": {
|
110
|
+
"type": "string",
|
111
|
+
"nullable": False,
|
112
|
+
"required": True,
|
113
|
+
},
|
114
|
+
"quantity": {"type": "float", "required": True},
|
115
|
+
"lots": self._schema_list_of(self.location_lot()),
|
79
116
|
}
|
80
117
|
)
|
81
118
|
return schema
|
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: 2024-
|
9
|
+
"PO-Revision-Date: 2024-10-17 15:06+0000\n"
|
10
10
|
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
|
11
11
|
"Language-Team: none\n"
|
12
12
|
"Language: it\n"
|
@@ -171,6 +171,9 @@ msgid ""
|
|
171
171
|
"<code>get_sort_key_assigned_to_current_user</code>: Return sort key to get "
|
172
172
|
"line assigned to current user first. (return a tuple)"
|
173
173
|
msgstr ""
|
174
|
+
"<code>get_sort_key_assigned_to_current_user</code>: restituisce la chiave di "
|
175
|
+
"ordinamento per ottenere prima la riga assegnata all'utente attuale. ("
|
176
|
+
"restituisce una tupla)"
|
174
177
|
|
175
178
|
#. module: shopfloor
|
176
179
|
#: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
|
@@ -178,6 +181,8 @@ msgid ""
|
|
178
181
|
"<code>get_sort_key_location</code>: Return sort key to sort by location. "
|
179
182
|
"(return a tuple)"
|
180
183
|
msgstr ""
|
184
|
+
"<code>get_sort_key_location</code>: restituisce la chiave di ordinamento "
|
185
|
+
"ordinata per ubicazione. (restituisce una tupla)"
|
181
186
|
|
182
187
|
#. module: shopfloor
|
183
188
|
#: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
|
@@ -185,11 +190,15 @@ msgid ""
|
|
185
190
|
"<code>get_sort_key_priority</code>: Return sort key to sort by priority. "
|
186
191
|
"(return a tuple)"
|
187
192
|
msgstr ""
|
193
|
+
"<code>get_sort_key_priority</code>: restituisce la chiave di ordinamento per "
|
194
|
+
"ordinare per priorità. (restituisce una tupla)"
|
188
195
|
|
189
196
|
#. module: shopfloor
|
190
197
|
#: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
|
191
198
|
msgid "<code>line</code>: The move line for with the key must be computed."
|
192
199
|
msgstr ""
|
200
|
+
"<code>line</code>: la riga movimento per la quale la chiave deve essere "
|
201
|
+
"calcolata."
|
193
202
|
|
194
203
|
#. module: shopfloor
|
195
204
|
#: model:ir.model,name:shopfloor.model_shopfloor_app
|
@@ -211,7 +220,7 @@ msgstr "Attiva zero controlli"
|
|
211
220
|
#. module: shopfloor
|
212
221
|
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_additional_domain
|
213
222
|
msgid "Additional domain used when searching move lines"
|
214
|
-
msgstr ""
|
223
|
+
msgstr "Dominio addizionale utilizzato quando si cercano le righe movimento"
|
215
224
|
|
216
225
|
#. module: shopfloor
|
217
226
|
#: model:ir.model,name:shopfloor.model_shopfloor_priority_postpone_mixin
|
@@ -413,17 +422,18 @@ msgstr "La creazione di movimenti non è consentita per il menu {}."
|
|
413
422
|
#. module: shopfloor
|
414
423
|
#: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__custom_code
|
415
424
|
msgid "Custom code"
|
416
|
-
msgstr ""
|
425
|
+
msgstr "Codice personalizzato"
|
417
426
|
|
418
427
|
#. module: shopfloor
|
419
428
|
#: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
|
420
429
|
msgid "Custom code to construct the key to sort move lines"
|
421
430
|
msgstr ""
|
431
|
+
"Codice personalizzato per costruire la chiave per ordinare le righe movimento"
|
422
432
|
|
423
433
|
#. module: shopfloor
|
424
434
|
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order_custom_code
|
425
435
|
msgid "Custom sort key code"
|
426
|
-
msgstr ""
|
436
|
+
msgstr "Codice chiave ordinamento personalizzato"
|
427
437
|
|
428
438
|
#. module: shopfloor
|
429
439
|
#. odoo-python
|
@@ -431,6 +441,8 @@ msgstr ""
|
|
431
441
|
#, python-format
|
432
442
|
msgid "Custom sort key code is only allowed when 'Custom code' is selected."
|
433
443
|
msgstr ""
|
444
|
+
"Il codice chiave ordinamento personalizzato è consentito quanto è "
|
445
|
+
"selezionato 'Codice personalizzato'."
|
434
446
|
|
435
447
|
#. module: shopfloor
|
436
448
|
#. odoo-python
|
@@ -438,6 +450,8 @@ msgstr ""
|
|
438
450
|
#, python-format
|
439
451
|
msgid "Custom sort key code is required when 'Custom code' is selected."
|
440
452
|
msgstr ""
|
453
|
+
"Il codice chiave ordinamento personaliazzato è richiesto quando è "
|
454
|
+
"selezionato 'Codice personalizzato'."
|
441
455
|
|
442
456
|
#. module: shopfloor
|
443
457
|
#: model:ir.model.fields,field_description:shopfloor.field_stock_move_line__date_planned
|
@@ -590,7 +604,7 @@ msgstr "Le righe hano ubicazioni destinazione differenti."
|
|
590
604
|
#. module: shopfloor
|
591
605
|
#: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__location
|
592
606
|
msgid "Location"
|
593
|
-
msgstr ""
|
607
|
+
msgstr "Ubicazione"
|
594
608
|
|
595
609
|
#. module: shopfloor
|
596
610
|
#. odoo-python
|
@@ -722,12 +736,12 @@ msgstr "Conteggio righe movimenti"
|
|
722
736
|
#. module: shopfloor
|
723
737
|
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_additional_domain_is_possible
|
724
738
|
msgid "Move Line Search Additional Domain Is Possible"
|
725
|
-
msgstr ""
|
739
|
+
msgstr "È consentita la ricerca dominio addizionale riga movimento"
|
726
740
|
|
727
741
|
#. module: shopfloor
|
728
742
|
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order_is_possible
|
729
743
|
msgid "Move Line Search Sort Order Is Possible"
|
730
|
-
msgstr ""
|
744
|
+
msgstr "È consentito l'ordine di ordinamento ricerca riga movimento"
|
731
745
|
|
732
746
|
#. module: shopfloor
|
733
747
|
#. odoo-python
|
@@ -1255,7 +1269,7 @@ msgstr "È possibile avere pre-colli prodotto"
|
|
1255
1269
|
#. module: shopfloor
|
1256
1270
|
#: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__priority
|
1257
1271
|
msgid "Priority"
|
1258
|
-
msgstr ""
|
1272
|
+
msgstr "Priorità"
|
1259
1273
|
|
1260
1274
|
#. module: shopfloor
|
1261
1275
|
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__allow_prepackaged_product
|
@@ -1324,7 +1338,7 @@ msgstr "Prodotto elaborato come prodotto grezzo"
|
|
1324
1338
|
#. module: shopfloor
|
1325
1339
|
#: model:ir.model.fields,help:shopfloor.field_shopfloor_menu__move_line_search_sort_order_custom_code
|
1326
1340
|
msgid "Python code to sort move lines. "
|
1327
|
-
msgstr ""
|
1341
|
+
msgstr "Codice Python per ordinare le righe movimento. "
|
1328
1342
|
|
1329
1343
|
#. module: shopfloor
|
1330
1344
|
#: model:ir.model,name:shopfloor.model_stock_quant
|
@@ -1617,7 +1631,7 @@ msgstr "Qualcuno sta già lavorando su questi trasferimenti"
|
|
1617
1631
|
#. module: shopfloor
|
1618
1632
|
#: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order
|
1619
1633
|
msgid "Sort method used when searching move lines"
|
1620
|
-
msgstr ""
|
1634
|
+
msgstr "Metodo ordinamento utilizzato quando si cercano le righe movimento"
|
1621
1635
|
|
1622
1636
|
#. module: shopfloor
|
1623
1637
|
#: model:ir.model.fields,field_description:shopfloor.field_stock_location__source_move_line_ids
|
@@ -1954,7 +1968,7 @@ msgstr "Questo trasferimento non esiste più o non è più disponibile."
|
|
1954
1968
|
#. module: shopfloor
|
1955
1969
|
#: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
|
1956
1970
|
msgid "Three variables are available:"
|
1957
|
-
msgstr ""
|
1971
|
+
msgstr "Sono disponibili tre variabili:"
|
1958
1972
|
|
1959
1973
|
#. module: shopfloor
|
1960
1974
|
#: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
|
@@ -1962,6 +1976,8 @@ msgid ""
|
|
1962
1976
|
"To assign the key value: <code>key = "
|
1963
1977
|
"get_sort_key_assigned_to_current_user(line) + (line.x, )</code>"
|
1964
1978
|
msgstr ""
|
1979
|
+
"Per assegnare il valore della chiave: <code>key = "
|
1980
|
+
"get_sort_key_assigned_to_current_user(line) + (line.x, )</code>"
|
1965
1981
|
|
1966
1982
|
#. module: shopfloor
|
1967
1983
|
#: model:ir.model.fields,field_description:shopfloor.field_stock_picking__total_weight
|
@@ -367,7 +367,7 @@ ul.auto-toc {
|
|
367
367
|
!! This file is generated by oca-gen-addon-readme !!
|
368
368
|
!! changes will be overwritten. !!
|
369
369
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
370
|
-
!! source digest: sha256:
|
370
|
+
!! source digest: sha256:4c4dc0050165bd957675ce9d57514bb2868133060d042e37d9ef7cba29c9fd6b
|
371
371
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
372
372
|
<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/licence-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>
|
373
373
|
<p>Shopfloor is a barcode scanner application for internal warehouse operations.</p>
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# Copyright 2020 Camptocamp SA (http://www.camptocamp.com)
|
2
2
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
3
|
+
from collections import defaultdict
|
4
|
+
|
3
5
|
from odoo.tools.float_utils import float_round
|
4
6
|
|
5
7
|
from odoo.addons.shopfloor_base.tests.common_misc import ActionsDataTestMixin
|
@@ -181,6 +183,16 @@ class ActionsDataCaseBase(CommonCase, ActionsDataTestMixin):
|
|
181
183
|
data.update(kw)
|
182
184
|
return data
|
183
185
|
|
186
|
+
def _expected_lot(self, record, **kw):
|
187
|
+
data = {
|
188
|
+
"id": record.id,
|
189
|
+
"name": record.name,
|
190
|
+
"ref": record.ref or None,
|
191
|
+
"expiration_date": record.expiration_date or None,
|
192
|
+
}
|
193
|
+
data.update(kw)
|
194
|
+
return data
|
195
|
+
|
184
196
|
|
185
197
|
class ActionsDataDetailCaseBase(ActionsDataCaseBase):
|
186
198
|
@classmethod
|
@@ -206,6 +218,16 @@ class ActionsDataDetailCaseBase(ActionsDataCaseBase):
|
|
206
218
|
"reserved_move_lines": self.data_detail.move_lines(
|
207
219
|
kw.get("move_lines", [])
|
208
220
|
),
|
221
|
+
"products": self.data_detail._location_content(record),
|
222
|
+
}
|
223
|
+
)
|
224
|
+
|
225
|
+
def _expected_location_lot(self, record, **kw):
|
226
|
+
return dict(
|
227
|
+
**self._expected_lot(record),
|
228
|
+
**{
|
229
|
+
"removal_date": record.removal_date or None,
|
230
|
+
"quantity": sum(record.quant_ids.mapped("quantity")),
|
209
231
|
}
|
210
232
|
)
|
211
233
|
|
@@ -215,16 +237,35 @@ class ActionsDataDetailCaseBase(ActionsDataCaseBase):
|
|
215
237
|
record.qty_available - record.free_qty,
|
216
238
|
precision_rounding=record.uom_id.rounding,
|
217
239
|
)
|
240
|
+
locations = self.data_detail._get_product_locations(record)
|
218
241
|
detail = {
|
219
242
|
"qty_available": qty_available,
|
220
243
|
"qty_reserved": qty_reserved,
|
221
244
|
}
|
245
|
+
locations_info = []
|
246
|
+
for location in locations:
|
247
|
+
quants = location.quant_ids.filtered(lambda q: q.product_id == record)
|
248
|
+
loc = self._expected_location(location)
|
249
|
+
loc["complete_name"] = location.complete_name
|
250
|
+
loc["quantity"] = sum(quants.mapped("quantity"))
|
251
|
+
loc["lots"] = []
|
252
|
+
quants_lot_qty = defaultdict(lambda: 0)
|
253
|
+
for quant in quants:
|
254
|
+
quants_lot_qty[quant.lot_id] += quant.quantity
|
255
|
+
for lot, qty in quants_lot_qty.items():
|
256
|
+
if not lot:
|
257
|
+
continue
|
258
|
+
lot_val = self._expected_location_lot(lot)
|
259
|
+
lot_val["quantity"] = qty
|
260
|
+
loc["lots"].append(lot_val)
|
261
|
+
locations_info.append(loc)
|
222
262
|
if kw.get("full"):
|
223
263
|
detail.update(
|
224
264
|
{
|
225
265
|
"image": "/web/image/product.product/{}/image_128".format(record.id)
|
226
266
|
if record.image_128
|
227
267
|
else None,
|
268
|
+
"locations": locations_info,
|
228
269
|
"manufacturer": {
|
229
270
|
"id": record.manufacturer_id.id,
|
230
271
|
"name": record.manufacturer_id.name,
|
@@ -56,11 +56,12 @@ class TestActionsDataDetailCase(ActionsDataDetailCaseBase):
|
|
56
56
|
"name": lot.name,
|
57
57
|
"ref": "#FOO",
|
58
58
|
"expiration_date": "2020-05-31T00:00:00",
|
59
|
+
"removal_date": "2020-05-20T00:00:00",
|
59
60
|
"product": self._expected_product_detail(self.product_b, full=True),
|
60
61
|
}
|
61
62
|
# ignore time and TZ, we don't care here
|
62
|
-
self.assertEqual(data.
|
63
|
-
self.assertEqual(data.
|
63
|
+
self.assertEqual(data.get("removal_date", "").split("T")[0], "2020-05-20")
|
64
|
+
self.assertEqual(data.get("expiration_date", "").split("T")[0], "2020-05-31")
|
64
65
|
self.assertDictEqual(data, expected)
|
65
66
|
|
66
67
|
def test_data_package(self):
|
{odoo_addon_shopfloor-16.0.2.2.1.5.dist-info → odoo_addon_shopfloor-16.0.2.3.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.3.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)
|
@@ -36,7 +36,7 @@ Shopfloor
|
|
36
36
|
!! This file is generated by oca-gen-addon-readme !!
|
37
37
|
!! changes will be overwritten. !!
|
38
38
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
39
|
-
!! source digest: sha256:
|
39
|
+
!! source digest: sha256:4c4dc0050165bd957675ce9d57514bb2868133060d042e37d9ef7cba29c9fd6b
|
40
40
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
41
41
|
|
42
42
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
{odoo_addon_shopfloor-16.0.2.2.1.5.dist-info → odoo_addon_shopfloor-16.0.2.3.0.dist-info}/RECORD
RENAMED
@@ -1,13 +1,13 @@
|
|
1
|
-
odoo/addons/shopfloor/README.rst,sha256=
|
1
|
+
odoo/addons/shopfloor/README.rst,sha256=igj3JCBBGe9PVg72B3IpVRw7sJOj7cwqPPl3ZZSbV48,5318
|
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=A2L2IIHDaRHyEFyHu-m-r6_fqdO4z1viAx73eiFzc_s,2245
|
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
|
7
7
|
odoo/addons/shopfloor/actions/change_package_lot.py,sha256=-MFk9G5vKJqWwaNYs9BSv4LHprbTLXE9xvRBNpfvFmo,6729
|
8
8
|
odoo/addons/shopfloor/actions/completion_info.py,sha256=Q_wlx8VJHOPFZbwGrxHBYa-gt04ZAXBsRBGh0aLuRrk,1483
|
9
9
|
odoo/addons/shopfloor/actions/data.py,sha256=ASj6VdLrkzJD6jTWsbKQ4LNZ_x2NU4BaXH_FA9RJvJQ,12846
|
10
|
-
odoo/addons/shopfloor/actions/data_detail.py,sha256=
|
10
|
+
odoo/addons/shopfloor/actions/data_detail.py,sha256=eVW5oOpl5Tkwkpb0he0Xj_PHLRS8LkOa5VOI2w5R2Zo,8752
|
11
11
|
odoo/addons/shopfloor/actions/inventory.py,sha256=Slg1hcV-kMb1jWHHu0VmYvQ9C0uqXtUAwAmHJUTE1zo,5976
|
12
12
|
odoo/addons/shopfloor/actions/location_content_transfer_sorter.py,sha256=xpzea-w4zFrmpudQK3omRpZVhJdEIVQLXnuImkaZf5A,3110
|
13
13
|
odoo/addons/shopfloor/actions/message.py,sha256=x12GUAQGq3HWOvf5D4D94NoIo_M9cARo0R6fiH1lKno,29956
|
@@ -15,7 +15,7 @@ odoo/addons/shopfloor/actions/move_line_search.py,sha256=Xhhx9RHaawNpa31DIgA8Q-c
|
|
15
15
|
odoo/addons/shopfloor/actions/packaging.py,sha256=uZxD1bisNS_8M5ZQAHuOz2MR6l26XHR4VZY7QgA69Zs,2662
|
16
16
|
odoo/addons/shopfloor/actions/savepoint.py,sha256=Tmqgh1k16x7L0ZSxVz9yNqIGLAyA7vFb5FWpLrb_GTI,1151
|
17
17
|
odoo/addons/shopfloor/actions/schema.py,sha256=r7CLlzmcHRcaKL0_qQBUeMiDrxbIwYfQB_Ydq867JtU,8556
|
18
|
-
odoo/addons/shopfloor/actions/schema_detail.py,sha256=
|
18
|
+
odoo/addons/shopfloor/actions/schema_detail.py,sha256=_xtm8ptRXAPBIMTyr8XKMQtogcjBudh-QRqKUZEEHGU,4968
|
19
19
|
odoo/addons/shopfloor/actions/search.py,sha256=ai-pLBLWiDjKYlZ2uWZQG6PeB2jBj5-1D34XjELaXMY,6851
|
20
20
|
odoo/addons/shopfloor/actions/stock.py,sha256=_m8b9u6V1P47G15RHw1JN4nLLy8N8bPlpe7Ip0QUpEs,10758
|
21
21
|
odoo/addons/shopfloor/actions/stock_unreserve.py,sha256=LoFd9hzeNlTQEn0-FN3N4xWLSo1uuiw5E394OEPHm-Y,2720
|
@@ -46,7 +46,7 @@ odoo/addons/shopfloor/docs/zone_picking_diag_seq.png,sha256=_qGnbfsShydA3Xjefaur
|
|
46
46
|
odoo/addons/shopfloor/i18n/ca.po,sha256=Mdv7UgORL2NMGoGX23BV_PG3JgImCTWmU_iGwbb9RzU,59104
|
47
47
|
odoo/addons/shopfloor/i18n/de.po,sha256=LSdchGr1zUVNlN6MYpa4B7T9opLsruAVF1wagA70fTw,57572
|
48
48
|
odoo/addons/shopfloor/i18n/es_AR.po,sha256=X4Io7boNJLC5a4pU7pMbaLu4B-JWFtuRrIq_diev74Y,80012
|
49
|
-
odoo/addons/shopfloor/i18n/it.po,sha256=
|
49
|
+
odoo/addons/shopfloor/i18n/it.po,sha256=E9CFPLju8IV8HS9lyf8ipN8ZaLpKNTRH87pAoiYpNHA,80252
|
50
50
|
odoo/addons/shopfloor/i18n/pt_BR.po,sha256=ulg9i8rJdOYqIsejyRnlRUXBWgO1XQ_Fe_jimPUStZw,57574
|
51
51
|
odoo/addons/shopfloor/i18n/shopfloor.pot,sha256=MTONXXg0MaL7fbQ0GuPdFHeu0DsCysIo-oLbzAsOLRk,57564
|
52
52
|
odoo/addons/shopfloor/migrations/16.0.2.0.0/post-migration.py,sha256=WfXnS5fj_K78VFaUAe0UiNhFX1C8LA0lkh6Zofllvc4,1311
|
@@ -84,14 +84,14 @@ odoo/addons/shopfloor/services/zone_picking.py,sha256=H6cA3NAHhxq3uUuwsCjep723fU
|
|
84
84
|
odoo/addons/shopfloor/services/forms/__init__.py,sha256=nxwJdKX47hb56ERf4Qb3UE5dkdsHCbkaXMAXs4XMAd8,27
|
85
85
|
odoo/addons/shopfloor/services/forms/picking_form.py,sha256=F15G5yw78Pd1WgPjMz00-K1JyGaTdfdvVYzG4Dubpqk,2626
|
86
86
|
odoo/addons/shopfloor/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
|
87
|
-
odoo/addons/shopfloor/static/description/index.html,sha256=
|
87
|
+
odoo/addons/shopfloor/static/description/index.html,sha256=8N6zktuYYLeo0GK8epzFHAyjez1OTy4iwgBGr7hYokI,17547
|
88
88
|
odoo/addons/shopfloor/tests/__init__.py,sha256=G9IP98Vs4Vx26FYbaxQcJST7xU7gjUggxTEiy8DPCMI,3902
|
89
89
|
odoo/addons/shopfloor/tests/common.py,sha256=v1C7DQT-MvTk81xIYyv--c1BaIpwbia2ey8s35nvrK4,11611
|
90
90
|
odoo/addons/shopfloor/tests/models.py,sha256=jNbYUqYLxkbQMn4j8bejHM3l6CRThJBDfpATl8H83OM,939
|
91
91
|
odoo/addons/shopfloor/tests/test_actions_change_package_lot.py,sha256=iWtTEbIKKrwqvoCUyfuaq1jAtnrW3DP8BQ1xEdZk9t4,46829
|
92
92
|
odoo/addons/shopfloor/tests/test_actions_data.py,sha256=pHuabdpTGbbvh7KSam-slLuwdIxLPy4JqZR0iLA9W4U,16514
|
93
|
-
odoo/addons/shopfloor/tests/test_actions_data_base.py,sha256=
|
94
|
-
odoo/addons/shopfloor/tests/test_actions_data_detail.py,sha256=
|
93
|
+
odoo/addons/shopfloor/tests/test_actions_data_base.py,sha256=bstdEhLIwOTOzQNUrIs-M7lnPdWQ5AILIDn-cXqC4xM,10499
|
94
|
+
odoo/addons/shopfloor/tests/test_actions_data_detail.py,sha256=0eHM8z1kka0FhGMcDk-Rc8hQNvHlivNzWQEMOnZH-9A,14079
|
95
95
|
odoo/addons/shopfloor/tests/test_actions_packaging.py,sha256=viofwEFk4aqn2tNaQGz2gGvBH6XoY25c6fO0a0uU448,1616
|
96
96
|
odoo/addons/shopfloor/tests/test_actions_search.py,sha256=lQo4G1PRG0iiFD832-H7wDuuSgQR-iNkYmdWk0H-tBk,9139
|
97
97
|
odoo/addons/shopfloor/tests/test_actions_search_move_line.py,sha256=ys7Y0mGdg3LNs8l1x8WCx8I_Qb9xsU9XAXOGPKuWv48,5783
|
@@ -185,7 +185,7 @@ odoo/addons/shopfloor/views/shopfloor_menu.xml,sha256=zAKIIMnglUsRnfvusKjKsRaZdQ
|
|
185
185
|
odoo/addons/shopfloor/views/stock_location.xml,sha256=d7iqbOQZbb5YPSdAXlQ6spcj8dUvQ37DpEGuaLX5B1M,829
|
186
186
|
odoo/addons/shopfloor/views/stock_move_line.xml,sha256=tn3pV67aRoYmn3qkm3aSgdYArY-z9SIrl_4fpJFy3Jo,1984
|
187
187
|
odoo/addons/shopfloor/views/stock_picking_type.xml,sha256=Ckn2835hO4HtuZQX9x3382C4gs789fb94Cx0444mBkc,800
|
188
|
-
odoo_addon_shopfloor-16.0.2.
|
189
|
-
odoo_addon_shopfloor-16.0.2.
|
190
|
-
odoo_addon_shopfloor-16.0.2.
|
191
|
-
odoo_addon_shopfloor-16.0.2.
|
188
|
+
odoo_addon_shopfloor-16.0.2.3.0.dist-info/METADATA,sha256=8wNWLnsyzRVU0_S0XBk0pnvMQgXH3gFvnXuEsZy3w5M,6761
|
189
|
+
odoo_addon_shopfloor-16.0.2.3.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
190
|
+
odoo_addon_shopfloor-16.0.2.3.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
|
191
|
+
odoo_addon_shopfloor-16.0.2.3.0.dist-info/RECORD,,
|
{odoo_addon_shopfloor-16.0.2.2.1.5.dist-info → odoo_addon_shopfloor-16.0.2.3.0.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|