odoo-addon-shopfloor-mobile 16.0.1.0.0.6__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_mobile/README.rst +215 -0
- odoo/addons/shopfloor_mobile/__init__.py +0 -0
- odoo/addons/shopfloor_mobile/__manifest__.py +17 -0
- odoo/addons/shopfloor_mobile/i18n/es_AR.po +39 -0
- odoo/addons/shopfloor_mobile/i18n/pt_BR.po +14 -0
- odoo/addons/shopfloor_mobile/i18n/shopfloor_mobile.pot +13 -0
- odoo/addons/shopfloor_mobile/readme/CONTRIBUTORS.rst +12 -0
- odoo/addons/shopfloor_mobile/readme/CREDITS.rst +5 -0
- odoo/addons/shopfloor_mobile/readme/DESCRIPTION.rst +31 -0
- odoo/addons/shopfloor_mobile/readme/HISTORY.rst +4 -0
- odoo/addons/shopfloor_mobile/readme/ROADMAP.rst +29 -0
- odoo/addons/shopfloor_mobile/readme/USAGE.rst +34 -0
- odoo/addons/shopfloor_mobile/static/description/icon.png +0 -0
- odoo/addons/shopfloor_mobile/static/description/index.html +555 -0
- odoo/addons/shopfloor_mobile/static/wms/.gitignore +21 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/batch_picking_detail.js +69 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/batch_picking_line_detail.js +141 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/detail_location.js +66 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/detail_lot.js +91 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/detail_operation.js +50 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/detail_package.js +73 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/detail_picking.js +40 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/detail_product.js +70 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/detail/detail_transfer.js +128 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/forms/form_edit_stock_picking.js +39 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/manual_select_color.js +24 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/misc.js +201 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/packaging-qty-picker.js +329 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/scenario_picking_detail/mixins.js +130 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/scenario_picking_detail/picking_select.js +135 -0
- odoo/addons/shopfloor_mobile/static/wms/src/components/scenario_picking_detail/picking_summary.js +212 -0
- odoo/addons/shopfloor_mobile/static/wms/src/css/main.css +73 -0
- odoo/addons/shopfloor_mobile/static/wms/src/css/normalize.css +351 -0
- odoo/addons/shopfloor_mobile/static/wms/src/demo/demo.checkout.js +257 -0
- odoo/addons/shopfloor_mobile/static/wms/src/demo/demo.cluster_picking.js +188 -0
- odoo/addons/shopfloor_mobile/static/wms/src/demo/demo.delivery.js +79 -0
- odoo/addons/shopfloor_mobile/static/wms/src/demo/demo.location_content_transfer.js +179 -0
- odoo/addons/shopfloor_mobile/static/wms/src/demo/demo.scan_anything.js +124 -0
- odoo/addons/shopfloor_mobile/static/wms/src/demo/demo.single_pack_transfer.js +83 -0
- odoo/addons/shopfloor_mobile/static/wms/src/demo/demo.zone_picking.js +277 -0
- odoo/addons/shopfloor_mobile/static/wms/src/i18n/add_translations_to_registry.js +4 -0
- odoo/addons/shopfloor_mobile/static/wms/src/i18n/en.json +31 -0
- odoo/addons/shopfloor_mobile/static/wms/src/i18n/fr.json +27 -0
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/checkout.js +390 -0
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/checkout_states.js +380 -0
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/cluster_picking.js +481 -0
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/delivery.js +353 -0
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/location_content_transfer.js +388 -0
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/single_pack_transfer.js +132 -0
- odoo/addons/shopfloor_mobile/static/wms/src/scenario/zone_picking.js +838 -0
- odoo/addons/shopfloor_mobile/static/wms/src/screen.js +36 -0
- odoo/addons/shopfloor_mobile/static/wms/src/wms_utils.js +318 -0
- odoo/addons/shopfloor_mobile/templates/assets.xml +180 -0
- odoo_addon_shopfloor_mobile-16.0.1.0.0.6.dist-info/METADATA +235 -0
- odoo_addon_shopfloor_mobile-16.0.1.0.0.6.dist-info/RECORD +57 -0
- odoo_addon_shopfloor_mobile-16.0.1.0.0.6.dist-info/WHEEL +5 -0
- odoo_addon_shopfloor_mobile-16.0.1.0.0.6.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2020 Camptocamp SA (http://www.camptocamp.com)
|
|
3
|
+
* @author Simone Orsi <simahawk@gmail.com>
|
|
4
|
+
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {demotools} from "/shopfloor_mobile_base/static/wms/src/demo/demo.core.js";
|
|
8
|
+
|
|
9
|
+
function _makePickingType() {
|
|
10
|
+
const lines_count = demotools.getRandomInt(10);
|
|
11
|
+
const picking_count = demotools.getRandomInt(10);
|
|
12
|
+
return demotools.makePickingType({
|
|
13
|
+
lines_count: lines_count,
|
|
14
|
+
picking_count: picking_count,
|
|
15
|
+
priority_lines_count: demotools.getRandomInt(lines_count),
|
|
16
|
+
priority_picking_count: demotools.getRandomInt(picking_count),
|
|
17
|
+
code: "internal",
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const pick_type1 = _makePickingType();
|
|
22
|
+
const pick_type2 = _makePickingType();
|
|
23
|
+
const pick_type3 = _makePickingType();
|
|
24
|
+
const pick_type4 = _makePickingType();
|
|
25
|
+
|
|
26
|
+
const scan_location_picking_types = _.sampleSize(
|
|
27
|
+
[pick_type1, pick_type2, pick_type3, pick_type4],
|
|
28
|
+
demotools.getRandomInt(4, 2)
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
function _makeZone() {
|
|
32
|
+
return demotools.makeLocation({
|
|
33
|
+
lines_count: _.sumBy(scan_location_picking_types, _.property("lines_count")),
|
|
34
|
+
picking_count: _.sumBy(
|
|
35
|
+
scan_location_picking_types,
|
|
36
|
+
_.property("picking_count")
|
|
37
|
+
),
|
|
38
|
+
priority_lines_count: _.sumBy(
|
|
39
|
+
scan_location_picking_types,
|
|
40
|
+
_.property("priority_lines_count")
|
|
41
|
+
),
|
|
42
|
+
priority_picking_count: _.sumBy(
|
|
43
|
+
scan_location_picking_types,
|
|
44
|
+
_.property("priority_picking_count")
|
|
45
|
+
),
|
|
46
|
+
operation_types: _.cloneDeep(scan_location_picking_types),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const zone1 = _makeZone();
|
|
51
|
+
const zone2 = _makeZone();
|
|
52
|
+
const zone3 = _makeZone();
|
|
53
|
+
const zone4 = _makeZone();
|
|
54
|
+
|
|
55
|
+
const available_zones = _.sampleSize(
|
|
56
|
+
[zone1, zone2, zone3, zone4],
|
|
57
|
+
demotools.getRandomInt(4, 2)
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const move_lines = demotools.makePickingLines(
|
|
61
|
+
{},
|
|
62
|
+
{lines_count: 30, line_random_pack: true, picking_auto: true}
|
|
63
|
+
);
|
|
64
|
+
const select_line_move_lines = _.orderBy(move_lines, ["priority"], ["desc"]);
|
|
65
|
+
_.forEach(select_line_move_lines, function (line, i) {
|
|
66
|
+
// Simulate random flag
|
|
67
|
+
line.location_will_be_empty = i % 3 == 0;
|
|
68
|
+
// Simulate adding 1 qty
|
|
69
|
+
line.qty_done++;
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const list_move_lines = {
|
|
73
|
+
next_state: "select_line",
|
|
74
|
+
data: {
|
|
75
|
+
select_line: {
|
|
76
|
+
zone_location: demotools.makeLocation(),
|
|
77
|
+
picking_type: _.cloneDeep(_.sample(scan_location_picking_types)),
|
|
78
|
+
move_lines: select_line_move_lines,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const unload_all_data = {
|
|
84
|
+
zone_location: demotools.makeLocation(),
|
|
85
|
+
picking_type: _.cloneDeep(list_move_lines.data.select_line.picking_type),
|
|
86
|
+
move_lines: _.cloneDeep(select_line_move_lines),
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const unload_set_destination_data = {
|
|
90
|
+
zone_location: demotools.makeLocation(),
|
|
91
|
+
picking_type: _.cloneDeep(list_move_lines.data.select_line.picking_type),
|
|
92
|
+
move_line: _.cloneDeep(select_line_move_lines[0]),
|
|
93
|
+
full_order_picking: true,
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const DEMO_CASE_1 = {
|
|
97
|
+
select_zone: {
|
|
98
|
+
next_state: "scan_location",
|
|
99
|
+
data: {
|
|
100
|
+
scan_location: {zones: available_zones},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
scan_location: {
|
|
104
|
+
next_state: "select_picking_type",
|
|
105
|
+
data: {
|
|
106
|
+
select_picking_type: {
|
|
107
|
+
zone_location: demotools.makeLocation(),
|
|
108
|
+
picking_types: _.cloneDeep(scan_location_picking_types),
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
list_move_lines: function (data) {
|
|
113
|
+
const res = _.cloneDeep(list_move_lines);
|
|
114
|
+
if (data.order == "location") {
|
|
115
|
+
res.data.select_line.move_lines = _.orderBy(
|
|
116
|
+
res.data.select_line.move_lines,
|
|
117
|
+
["location_src.name"]
|
|
118
|
+
);
|
|
119
|
+
} else {
|
|
120
|
+
res.data.select_line.move_lines = _.orderBy(
|
|
121
|
+
res.data.select_line.move_lines,
|
|
122
|
+
["priority"],
|
|
123
|
+
["desc"]
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
return res;
|
|
127
|
+
},
|
|
128
|
+
scan_source: {
|
|
129
|
+
next_state: "set_line_destination",
|
|
130
|
+
data: {
|
|
131
|
+
set_line_destination: {
|
|
132
|
+
zone_location: demotools.makeLocation(),
|
|
133
|
+
picking_type: _.cloneDeep(
|
|
134
|
+
list_move_lines.data.select_line.picking_type
|
|
135
|
+
),
|
|
136
|
+
move_line: _.cloneDeep(select_line_move_lines[0]),
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
set_destination: {
|
|
141
|
+
next_state: "select_line",
|
|
142
|
+
message: {
|
|
143
|
+
message_type: "success",
|
|
144
|
+
body: "Item moved",
|
|
145
|
+
},
|
|
146
|
+
data: {
|
|
147
|
+
select_line: {
|
|
148
|
+
zone_location: demotools.makeLocation(),
|
|
149
|
+
picking_type: _.cloneDeep(
|
|
150
|
+
list_move_lines.data.select_line.picking_type
|
|
151
|
+
),
|
|
152
|
+
move_lines: _.cloneDeep(select_line_move_lines),
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
prepare_unload: {
|
|
157
|
+
next_state: "unload_all",
|
|
158
|
+
data: {
|
|
159
|
+
unload_all: _.cloneDeep(unload_all_data),
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
stock_issue: {
|
|
163
|
+
next_state: "select_line",
|
|
164
|
+
message: {
|
|
165
|
+
message_type: "success",
|
|
166
|
+
body: "Stock out confirmed",
|
|
167
|
+
},
|
|
168
|
+
data: {
|
|
169
|
+
select_line: _.cloneDeep(list_move_lines.data.select_line),
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
is_zero: {
|
|
173
|
+
next_state: "select_line",
|
|
174
|
+
message: {
|
|
175
|
+
message_type: "success",
|
|
176
|
+
body: "Stock zero confirmed",
|
|
177
|
+
},
|
|
178
|
+
data: {
|
|
179
|
+
select_line: _.cloneDeep(list_move_lines.data.select_line),
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
set_destination_all: function (data) {
|
|
183
|
+
if (!data.confirmation) {
|
|
184
|
+
const _data = _.extend(_.cloneDeep(unload_all_data), {
|
|
185
|
+
confirmation_required: true,
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
next_state: "unload_all",
|
|
189
|
+
data: {
|
|
190
|
+
unload_all: _data,
|
|
191
|
+
},
|
|
192
|
+
message: {
|
|
193
|
+
message_type: "warning",
|
|
194
|
+
body: "Confirm you want to unload them all?",
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
next_state: "select_line",
|
|
200
|
+
message: {
|
|
201
|
+
message_type: "success",
|
|
202
|
+
body: "All lines moved",
|
|
203
|
+
},
|
|
204
|
+
data: {
|
|
205
|
+
select_line: _.cloneDeep(list_move_lines.data.select_line),
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
change_pack_lot: {
|
|
210
|
+
next_state: "set_line_destination",
|
|
211
|
+
data: {
|
|
212
|
+
set_line_destination: {
|
|
213
|
+
zone_location: demotools.makeLocation(),
|
|
214
|
+
picking_type: _.cloneDeep(
|
|
215
|
+
list_move_lines.data.select_line.picking_type
|
|
216
|
+
),
|
|
217
|
+
move_line: _.cloneDeep(select_line_move_lines[0]),
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
unload_split: {
|
|
222
|
+
next_state: "unload_single",
|
|
223
|
+
data: {
|
|
224
|
+
unload_single: {
|
|
225
|
+
zone_location: demotools.makeLocation(),
|
|
226
|
+
picking_type: _.cloneDeep(
|
|
227
|
+
list_move_lines.data.select_line.picking_type
|
|
228
|
+
),
|
|
229
|
+
move_line: _.cloneDeep(select_line_move_lines[0]),
|
|
230
|
+
full_order_picking: true,
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
unload_scan_pack: {
|
|
235
|
+
next_state: "unload_set_destination",
|
|
236
|
+
data: {
|
|
237
|
+
unload_set_destination: unload_set_destination_data,
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
unload_scan_destination: function (data) {
|
|
241
|
+
if (!data.confirmation) {
|
|
242
|
+
const _data = _.extend(_.cloneDeep(unload_set_destination_data), {
|
|
243
|
+
confirmation_required: true,
|
|
244
|
+
});
|
|
245
|
+
return {
|
|
246
|
+
next_state: "unload_set_destination",
|
|
247
|
+
data: {
|
|
248
|
+
unload_set_destination: _data,
|
|
249
|
+
},
|
|
250
|
+
message: {
|
|
251
|
+
message_type: "warning",
|
|
252
|
+
body: "Confirm you want to unload them all?",
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
next_state: "select_line",
|
|
258
|
+
message: {
|
|
259
|
+
message_type: "success",
|
|
260
|
+
body: "All lines moved",
|
|
261
|
+
},
|
|
262
|
+
data: {
|
|
263
|
+
select_line: _.cloneDeep(list_move_lines.data.select_line),
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
const menuitem_id = demotools.addAppMenu(
|
|
270
|
+
{
|
|
271
|
+
name: "Zone picking: case 1",
|
|
272
|
+
scenario: "zone_picking",
|
|
273
|
+
picking_types: [{id: 27, name: "Random type"}],
|
|
274
|
+
},
|
|
275
|
+
"zp_1"
|
|
276
|
+
);
|
|
277
|
+
demotools.add_case("zone_picking", menuitem_id, DEMO_CASE_1);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import {translation_registry} from "/shopfloor_mobile_base/static/wms/src/services/translation_registry.js";
|
|
2
|
+
|
|
3
|
+
translation_registry.load("fr-FR", "/shopfloor_mobile/static/wms/src/i18n/fr.json");
|
|
4
|
+
translation_registry.load("en-US", "/shopfloor_mobile/static/wms/src/i18n/en.json");
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.nav.op_types": "Operation types",
|
|
3
|
+
"app.nav.scenario": "Scenario:",
|
|
4
|
+
"btn.ok.title": "OK",
|
|
5
|
+
"cluster_picking.change_pack_lot.scan_placeholder": "Scan pack or lot",
|
|
6
|
+
"cluster_picking.change_pack_lot.title": "Change pack or lot",
|
|
7
|
+
"cluster_picking.confirm_unload_all.title": "Unload all bins confirm",
|
|
8
|
+
"cluster_picking.confirm_unload_set_destination.title": "Set destination confirm",
|
|
9
|
+
"cluster_picking.manual_selection.title": "Select a batch and start",
|
|
10
|
+
"cluster_picking.scan_destination.scan_placeholder": "Scan destination bin",
|
|
11
|
+
"cluster_picking.scan_destination.title": "Check qty and scan a destination bin",
|
|
12
|
+
"cluster_picking.start_line.scan_placeholder": "Scan location / pack / product / lot",
|
|
13
|
+
"cluster_picking.start_line.scan_placeholder_location_pack": "Scan location / pack",
|
|
14
|
+
"cluster_picking.start_line.scan_placeholder_product_lot_pack": "Scan product / lot / pack",
|
|
15
|
+
"cluster_picking.start_line.title": "Pick the product by scanning something",
|
|
16
|
+
"cluster_picking.unload_all.title": "Unload all bins",
|
|
17
|
+
"cluster_picking.unload_set_destination.title": "Set destination",
|
|
18
|
+
"cluster_picking.unload_single.title": "Unload single bin",
|
|
19
|
+
"list.no_items": "No item to list.",
|
|
20
|
+
"location_content_transfer.scan_destination.title": "Set a qty and scan destination location",
|
|
21
|
+
"location_content_transfer.scan_destination_all.title": "Scan destination location for all items",
|
|
22
|
+
"location_content_transfer.scan_location.title": "Start by scanning a location",
|
|
23
|
+
"location_content_transfer.start_single.scan_placeholder": "Scan pack / product / lot",
|
|
24
|
+
"misc.actions_popup.btn_action": "Action",
|
|
25
|
+
"misc.btn_get_work": "Get work",
|
|
26
|
+
"misc.btn_manual_selection": "Manual Selection",
|
|
27
|
+
"misc.lines_count": "Number of lines",
|
|
28
|
+
"misc.stock_zero_check.confirm_stock_not_zero": "Confirm stock",
|
|
29
|
+
"misc.stock_zero_check.confirm_stock_zero": "Confirm out of stock",
|
|
30
|
+
"scan_placeholder_translation": "Scan location"
|
|
31
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app.nav.op_types": "Type d'operation",
|
|
3
|
+
"app.nav.scenario": "Scénario:",
|
|
4
|
+
"btn.ok.title": "OK",
|
|
5
|
+
"cluster_picking.change_pack_lot.scan_placeholder": "Scannez la boite ou le lot",
|
|
6
|
+
"cluster_picking.change_pack_lot.title": "Changer de boite ou de lot",
|
|
7
|
+
"cluster_picking.confirm_unload_all.title": "Confirmez le déchargement de tous les compartiments",
|
|
8
|
+
"cluster_picking.confirm_unload_set_destination.title": "Confirmez l'emplacement de destination",
|
|
9
|
+
"cluster_picking.manual_selection.title": "Sélectionnez une vague de préparation et démarrez",
|
|
10
|
+
"cluster_picking.scan_destination.scan_placeholder": "Scannez le compartiment de destination",
|
|
11
|
+
"cluster_picking.scan_destination.title": "Vérifiez la qté et scannez un compartiment de destination",
|
|
12
|
+
"cluster_picking.start_line.scan_placeholder": "Scannez l'emplacement / la boite / le produit / le lot",
|
|
13
|
+
"cluster_picking.start_line.title": "Sélectionnez le produit en scannant quelque chose",
|
|
14
|
+
"cluster_picking.unload_all.title": "Décharger tous les compartiments",
|
|
15
|
+
"cluster_picking.unload_set_destination.title": "Définir un emplacement de destination",
|
|
16
|
+
"cluster_picking.unload_single.title": "Décharger un seul compartiment",
|
|
17
|
+
"location_content_transfer.scan_destination.title": "Définissez une qté et scannez l'emplacement de destination",
|
|
18
|
+
"location_content_transfer.scan_destination_all.title": "Scannez l'emplacement de destination pour tous les produits",
|
|
19
|
+
"location_content_transfer.scan_location.title": "Commencez en scannant un emplacement",
|
|
20
|
+
"location_content_transfer.start_single.scan_placeholder": "Scannez une boite / un produit / un lot",
|
|
21
|
+
"misc.btn_get_work": "Obtenir du travail",
|
|
22
|
+
"misc.btn_manual_selection": "Sélection manuelle",
|
|
23
|
+
"misc.lines_count": "Nombre de lignes",
|
|
24
|
+
"misc.stock_zero_check.confirm_stock_not_zero": "Confirmer le stock",
|
|
25
|
+
"misc.stock_zero_check.confirm_stock_zero": "Rupture de stock",
|
|
26
|
+
"scan_placeholder_translation": "Scannez un emplacement"
|
|
27
|
+
}
|