odoo-addon-stock-barcodes 15.0.3.1.6__py3-none-any.whl → 16.0.1.0.0.18__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 (59) hide show
  1. odoo/addons/stock_barcodes/README.rst +6 -6
  2. odoo/addons/stock_barcodes/__manifest__.py +8 -7
  3. odoo/addons/stock_barcodes/data/stock_barcodes_option.xml +1 -2
  4. odoo/addons/stock_barcodes/hooks.py +15 -13
  5. odoo/addons/stock_barcodes/i18n/es.po +2 -2
  6. odoo/addons/stock_barcodes/i18n/it.po +5 -5
  7. odoo/addons/stock_barcodes/i18n/stock_barcodes.pot +190 -160
  8. odoo/addons/stock_barcodes/models/__init__.py +1 -1
  9. odoo/addons/stock_barcodes/models/stock_barcodes_action.py +2 -1
  10. odoo/addons/stock_barcodes/models/stock_barcodes_option.py +2 -4
  11. odoo/addons/stock_barcodes/models/stock_move.py +37 -0
  12. odoo/addons/stock_barcodes/models/stock_move_line.py +8 -14
  13. odoo/addons/stock_barcodes/models/stock_picking.py +9 -36
  14. odoo/addons/stock_barcodes/models/stock_picking_type.py +5 -6
  15. odoo/addons/stock_barcodes/models/stock_quant.py +3 -4
  16. odoo/addons/stock_barcodes/security/ir.model.access.csv +0 -2
  17. odoo/addons/stock_barcodes/static/description/index.html +9 -11
  18. odoo/addons/stock_barcodes/static/src/css/stock.scss +41 -5
  19. odoo/addons/stock_barcodes/static/src/utils/barcode_handler_field.esm.js +36 -0
  20. odoo/addons/stock_barcodes/static/src/utils/barcodes_models_utils.esm.js +25 -0
  21. odoo/addons/stock_barcodes/static/src/views/form_view.esm.js +17 -0
  22. odoo/addons/stock_barcodes/static/src/views/kanban_renderer.esm.js +149 -0
  23. odoo/addons/stock_barcodes/static/src/views/view_compiler.esm.js +16 -0
  24. odoo/addons/stock_barcodes/static/src/views/views.esm.js +193 -0
  25. odoo/addons/stock_barcodes/static/src/widgets/boolean_toggle.esm.js +26 -0
  26. odoo/addons/stock_barcodes/static/src/widgets/numeric_step.esm.js +40 -0
  27. odoo/addons/stock_barcodes/static/src/widgets/numeric_step.xml +17 -0
  28. odoo/addons/stock_barcodes/static/src/widgets/view_button.esm.js +8 -0
  29. odoo/addons/stock_barcodes/static/src/widgets/view_button.xml +14 -0
  30. odoo/addons/stock_barcodes/tests/common.py +167 -0
  31. odoo/addons/stock_barcodes/tests/test_stock_barcodes.py +4 -172
  32. odoo/addons/stock_barcodes/tests/test_stock_barcodes_new_lot.py +2 -2
  33. odoo/addons/stock_barcodes/tests/test_stock_barcodes_picking.py +8 -8
  34. odoo/addons/stock_barcodes/views/stock_barcodes_option_view.xml +1 -1
  35. odoo/addons/stock_barcodes/views/stock_picking_views.xml +4 -3
  36. odoo/addons/stock_barcodes/wizard/stock_barcodes_read.py +45 -91
  37. odoo/addons/stock_barcodes/wizard/stock_barcodes_read_inventory.py +1 -4
  38. odoo/addons/stock_barcodes/wizard/stock_barcodes_read_inventory_views.xml +14 -15
  39. odoo/addons/stock_barcodes/wizard/stock_barcodes_read_picking.py +256 -92
  40. odoo/addons/stock_barcodes/wizard/stock_barcodes_read_picking_views.xml +59 -37
  41. odoo/addons/stock_barcodes/wizard/stock_barcodes_read_todo.py +33 -107
  42. odoo/addons/stock_barcodes/wizard/stock_barcodes_read_todo_view.xml +70 -28
  43. odoo/addons/stock_barcodes/wizard/stock_barcodes_read_views.xml +172 -189
  44. odoo/addons/stock_barcodes/wizard/stock_production_lot.py +2 -2
  45. odoo/addons/stock_barcodes/wizard/stock_production_lot_views.xml +6 -8
  46. {odoo_addon_stock_barcodes-15.0.3.1.6.dist-info → odoo_addon_stock_barcodes-16.0.1.0.0.18.dist-info}/METADATA +11 -11
  47. odoo_addon_stock_barcodes-16.0.1.0.0.18.dist-info/RECORD +66 -0
  48. {odoo_addon_stock_barcodes-15.0.3.1.6.dist-info → odoo_addon_stock_barcodes-16.0.1.0.0.18.dist-info}/WHEEL +1 -1
  49. odoo/addons/stock_barcodes/migrations/15.0.1.0.0/pre-migration.py +0 -14
  50. odoo/addons/stock_barcodes/models/stock_barcodes_read_log.py +0 -51
  51. odoo/addons/stock_barcodes/static/src/css/stock.css +0 -5
  52. odoo/addons/stock_barcodes/static/src/js/barcodes_models_mixin.js +0 -34
  53. odoo/addons/stock_barcodes/static/src/js/basic_controller.js +0 -412
  54. odoo/addons/stock_barcodes/static/src/js/basic_fields.js +0 -59
  55. odoo/addons/stock_barcodes/static/src/js/form_view.js +0 -24
  56. odoo/addons/stock_barcodes/static/src/js/kanban_renderer.js +0 -47
  57. odoo/addons/stock_barcodes/static/src/js/numeric_step.js +0 -43
  58. odoo_addon_stock_barcodes-15.0.3.1.6.dist-info/RECORD +0 -62
  59. {odoo_addon_stock_barcodes-15.0.3.1.6.dist-info → odoo_addon_stock_barcodes-16.0.1.0.0.18.dist-info}/top_level.txt +0 -0
@@ -19,7 +19,7 @@
19
19
  <tree>
20
20
  <field name="name" />
21
21
  </tree>
22
- <kanban class="o_kanban_mobile o_kanban_barcode">
22
+ <kanban class="o_kanban_mobile">
23
23
  <field name="name" />
24
24
  <field name="action_window_id" />
25
25
  <field name="key_shortcut" />
@@ -28,20 +28,27 @@
28
28
  <templates>
29
29
  <t t-name="kanban-box">
30
30
  <div
31
- class="oe_kanban_details oe_kanban_card_full_width"
31
+ class="oe_kanban_details oe_kanban_card_full_width pt-4 pb-4"
32
32
  >
33
+ <t
34
+ t-set="shortcut"
35
+ t-value="record.key_char_shortcut"
36
+ />
37
+ <t
38
+ t-set="hotkey"
39
+ t-value="context.context_display_menu &amp;&amp; record.key_char_shortcut.raw_value || ''"
40
+ />
33
41
  <button
34
42
  name="open_action"
35
43
  type="object"
36
- class="pull-right btn"
44
+ class="float-end btn-full-width btn"
37
45
  style="width:100%"
38
- t-att-aria-keyshortcuts="key_char_shortcut"
39
- t-att-data-hotkey="context.context_display_menu &amp;&amp; record.key_char_shortcut.raw_value || ''"
46
+ data-hotkey="hotkey"
40
47
  >
41
48
  <div class="row">
42
49
  <div class="col-1">
43
50
  <i
44
- t-attf-class="text-right #{record.icon_class.raw_value}"
51
+ t-attf-class="text-end #{record.icon_class.raw_value}"
45
52
  />
46
53
  </div>
47
54
  <div class="col">
@@ -63,30 +70,30 @@
63
70
  attrs="{'invisible': [('display_menu', '=', True)]}"
64
71
  class="flex-fill oe_stock_barcordes_content"
65
72
  >
66
- <div name="info" class="text-center h3">
73
+ <div name="info" class="text-center h3 mb-0">
67
74
  <div
68
- class="alert alert-success"
75
+ class="alert alert-success mb-0"
69
76
  role="status"
70
77
  attrs="{'invisible': [('message_type', '!=', 'success')]}"
71
78
  >
72
- <field name="message" />
79
+ <field name="message" class="mt-2" />
73
80
  </div>
74
81
  <div
75
- class="alert alert-info"
82
+ class="alert alert-info mb-0"
76
83
  role="status"
77
84
  attrs="{'invisible': [('message_type', '!=', 'info')]}"
78
85
  >
79
- <field name="message" />
86
+ <field name="message" class="mt-2" />
80
87
  </div>
81
88
  <div
82
- class="alert alert-danger"
89
+ class="alert alert-danger mb-0"
83
90
  role="status"
84
91
  attrs="{'invisible': [('message_type', '!=', 'more_match'), ('message_type', '!=', 'not_found')]}"
85
92
  >
86
- <field name="message" />
93
+ <field name="message" class="mt-2" />
87
94
  <button
88
95
  name="action_clean_message"
89
- class="fa fa-window-close pull-right"
96
+ class="float-end fa-window-close fa"
90
97
  type="object"
91
98
  title="Clean message"
92
99
  />
@@ -97,7 +104,6 @@
97
104
  <field name="step" invisible="1" force_save="1" />
98
105
  <field name="is_manual_qty" invisible="1" />
99
106
  <field name="is_manual_confirm" invisible="1" />
100
- <field name="show_scan_log" invisible="1" />
101
107
  <field name="auto_lot" invisible="1" />
102
108
  <field name="product_tracking" invisible="1" force_save="1" />
103
109
  <field name="guided_product_id" invisible="1" force_save="1" />
@@ -113,7 +119,6 @@
113
119
  <field name="res_id" invisible="1" />
114
120
  <field name="option_group_id" invisible="1" force_save="1" />
115
121
  <field name="confirmed_moves" invisible="1" force_save="1" />
116
- <field name="qty_available" invisible="1" />
117
122
  <field name="owner_id" invisible="1" force_save="1" />
118
123
  <field name="keep_result_package" invisible="1" />
119
124
  <field name="create_lot" invisible="1" />
@@ -123,9 +128,9 @@
123
128
  widget="barcode_handler"
124
129
  invisible="0"
125
130
  />
126
- <group name="scan_fields" class="bg-light">
127
- <group name="location">
128
- <div class="mt4">
131
+ <group name="scan_fields" class="bg-light scan_fields">
132
+ <group name="location" col="1">
133
+ <div class="mt-1" colspan="2">
129
134
  <strong
130
135
  class=" d-none d-sm-block"
131
136
  >Source Location</strong>
@@ -135,10 +140,11 @@
135
140
  />
136
141
  <field
137
142
  name="location_id"
138
- options="{'no_create': True}"
143
+ options="{'no_create': True, 'no_open': True}"
139
144
  attrs="{'readonly': [('manual_entry', '=', False)]}"
140
145
  force_save="1"
141
- style="width:85%"
146
+ nolabel="1"
147
+ style="width:90%"
142
148
  class="h5"
143
149
  />
144
150
  </div>
@@ -146,11 +152,12 @@
146
152
  <group
147
153
  name="quant_package"
148
154
  groups="stock.group_tracking_lot"
155
+ col="2"
149
156
  >
150
- <div class="mt4">
157
+ <div class="m-0" colspan="2">
151
158
  <strong
152
159
  class="d-none d-sm-block"
153
- >Source Package -> Result Package</strong>
160
+ >Source Package -&gt; Result Package</strong>
154
161
  <span
155
162
  class="fa fa-cubes d-sm-none oe_span_small_icon"
156
163
  title="Source Package to Result Package"
@@ -160,40 +167,24 @@
160
167
  options="{'no_create': True}"
161
168
  attrs="{'readonly': [('manual_entry', '=', False)]}"
162
169
  force_save="1"
163
- style="width:35%"
164
- class="h5"
170
+ class="h5 oe_inline"
171
+ style="width: 35% !important"
165
172
  />
166
173
  <span
167
174
  attrs="{'invisible': [('result_package_id', '=', False)]}"
168
- >-></span>
175
+ >-&gt;</span>
169
176
  <field
170
177
  name="result_package_id"
171
- options="{'no_create': True}"
178
+ options="{'no_create': True, 'no_open': True}"
172
179
  attrs="{'readonly': [('manual_entry', '=', False)]}"
173
180
  force_save="1"
174
- style="width:35%"
175
- class="h5"
176
- />
177
- <button
178
- class="btn btn-warning btn-sm oe_kanban_action_button pull-right mr4"
179
- name="action_clean_package"
180
- type="object"
181
- icon="fa-trash fa-1x"
182
- attrs="{'invisible': [('package_id', '=', False), ('result_package_id', '=', False)]}"
183
- title="Clean package info"
184
- />
185
- <button
186
- id="btn_create_package"
187
- class="btn btn-secondary ml2 btn-sm oe_kanban_action_button pull-right mr4"
188
- type="object"
189
- name="action_create_package"
190
- icon="fa-plus fa-1x"
191
- title="Create new package"
181
+ class="h5 oe_inline ms-1"
182
+ style="width: 35% !important"
192
183
  />
193
184
  <!-- Double button to display open or closed padlock -->
194
185
  <button
195
186
  id="btn_keep_result_package_lock"
196
- class="btn btn-danger ml2 btn-sm oe_kanban_action_button pull-right mr4"
187
+ class="btn-sm btn-danger oe_kanban_action_button btn boder ms-1"
197
188
  type="object"
198
189
  name="action_keep_result_package"
199
190
  title="If locked keep result package"
@@ -202,7 +193,7 @@
202
193
  />
203
194
  <button
204
195
  id="btn_keep_result_package_unlock"
205
- class="btn btn-secondary ml2 btn-sm oe_kanban_action_button pull-right mr4 "
196
+ class="btn-sm oe_kanban_action_button btn btn-secondary border ms-1"
206
197
  type="object"
207
198
  name="action_keep_result_package"
208
199
  title="If locked keep result package"
@@ -210,10 +201,26 @@
210
201
  attrs="{'invisible': [('keep_result_package', '=', True)]}"
211
202
  />
212
203
  <!-- End padlock -->
204
+ <button
205
+ class="btn-sm btn-warning oe_kanban_action_button btn border ms-1"
206
+ name="action_clean_package"
207
+ type="object"
208
+ icon="fa-trash fa-1x"
209
+ attrs="{'invisible': [('package_id', '=', False), ('result_package_id', '=', False)]}"
210
+ title="Clean package info"
211
+ />
212
+ <button
213
+ id="btn_create_package"
214
+ class="btn-sm oe_kanban_action_button btn btn-secondary border ms-1"
215
+ type="object"
216
+ name="action_create_package"
217
+ icon="fa-plus fa-1x"
218
+ title="Create new package"
219
+ />
213
220
  </div>
214
221
  </group>
215
- <group>
216
- <div class="mt4">
222
+ <group col="2">
223
+ <div class="m-0" colspan="2">
217
224
  <strong class="d-none d-sm-block">Product</strong>
218
225
  <span
219
226
  class="fa fa-th-list d-sm-none oe_span_small_icon"
@@ -221,26 +228,28 @@
221
228
  />
222
229
  <field
223
230
  name="product_id"
224
- options="{'no_create': True}"
231
+ options="{'no_create': True, 'no_open': True}"
225
232
  attrs="{'readonly': [('manual_entry', '=', False)]}"
226
233
  force_save="1"
227
- style="width:85%"
234
+ style="width:80%"
228
235
  class="h5"
229
236
  />
230
237
  <button
231
- class="btn btn-warning btn-sm pull-right mr4 oe_kanban_action_button"
238
+ class="btn-sm float-end btn-warning oe_kanban_action_button btn mr4"
232
239
  name="action_clean_product"
233
240
  type="object"
234
241
  icon="fa-trash fa-1x"
242
+ title="Clean product"
235
243
  attrs="{'invisible': [('product_id', '=', False)]}"
236
244
  />
237
245
  </div>
238
246
  </group>
239
247
  <group
240
248
  groups="stock.group_production_lot"
249
+ col="2"
241
250
  attrs="{'invisible': [('product_tracking', 'in', [False, 'none'])]}"
242
251
  >
243
- <div>
252
+ <div class="m-0" colspan="2">
244
253
  <strong class="d-none d-sm-block">Lot S/N</strong>
245
254
  <span
246
255
  class="fa fa-tags d-sm-none oe_span_small_icon"
@@ -254,7 +263,7 @@
254
263
  />
255
264
  <field
256
265
  name="lot_id"
257
- options="{'no_create': True}"
266
+ options="{'no_create': True, 'no_open': True}"
258
267
  domain="[('product_id', '=', product_id)]"
259
268
  context="{'default_product_id': product_id}"
260
269
  attrs="{'readonly': [('manual_entry', '=', False)], 'invisible': [('create_lot', '!=', False)]}"
@@ -263,18 +272,21 @@
263
272
  class="h5"
264
273
  />
265
274
  <button
266
- class="btn btn-warning btn-sm pull-right mr4 oe_kanban_action_button"
275
+ class="btn-sm float-end btn-warning oe_kanban_action_button btn mr4"
267
276
  name="action_clean_lot"
268
277
  type="object"
269
278
  icon="fa-trash fa-1x"
270
279
  attrs="{'invisible': [('lot_id', '=', False), ('lot_name', '=', False)]}"
280
+ title="Clean lot"
281
+ data-hotkey="G"
271
282
  />
272
283
  <button
273
284
  id="btn_create_lot"
274
- class="btn btn-secondary ml2 btn-sm oe_kanban_action_button pull-right mr4"
285
+ class="btn-sm float-end oe_kanban_action_button btn btn-secondary border"
275
286
  type="action"
276
287
  name="%(action_stock_barcodes_new_lot)d"
277
288
  icon="fa-plus fa-1x"
289
+ title="Create lot"
278
290
  context="{'default_product_id': product_id}"
279
291
  attrs="{'invisible': [('create_lot', '=', False)]}"
280
292
  help="Create new lot"
@@ -284,9 +296,9 @@
284
296
  <group
285
297
  name="option_qty_info"
286
298
  attrs="{'invisible': ['|', ('product_id', '=', False),'|', ('is_manual_qty', '=', True), ('manual_entry', '=', True)]}"
287
- col="1"
299
+ col="2"
288
300
  >
289
- <div class="mt4">
301
+ <div class="m-0" colspan="2">
290
302
  <strong class="d-none d-sm-block">Total Qty</strong>
291
303
  <span
292
304
  class="fa fa-hashtag d-sm-none oe_span_small_icon"
@@ -301,15 +313,18 @@
301
313
  />
302
314
  </div>
303
315
  </group>
304
-
305
316
  <group
306
317
  name="option_qty"
307
318
  attrs="{'invisible': ['|', ('product_id', '=', False),'&amp;', ('is_manual_qty', '=', False), ('manual_entry', '=', False)]}"
308
- col="1"
319
+ col="2"
309
320
  >
310
- <div class="row mt8" name="option_qty_header">
321
+ <div
322
+ class="row mt8"
323
+ name="option_qty_header"
324
+ colspan="2"
325
+ >
311
326
  <div
312
- class="col text-center pr-0"
327
+ class="text-center col"
313
328
  name="total_qty_header"
314
329
  >
315
330
  <div
@@ -317,103 +332,37 @@
317
332
  >
318
333
  <span>(<field
319
334
  name="total_product_qty_done"
335
+ class="oe_inline"
320
336
  readonly="1"
321
337
  /> / <field
322
338
  name="total_product_uom_qty"
339
+ class="oe_inline"
323
340
  readonly="1"
324
341
  />) <field
325
342
  name="product_uom_id"
343
+ class="oe_inline"
326
344
  options="{'no_open': True}"
327
345
  readonly="1"
346
+ widget="selection"
328
347
  /></span>
329
348
  </div>
330
349
  </div>
331
350
  </div>
332
- <div class="row" name="option_qty_fields">
333
- <div class="col text-center" name="total_qty_field">
334
- <field
335
- name="product_qty"
336
- force_save="1"
337
- widget="numeric_step"
338
- options="{'auto_select': True}"
339
- />
340
- </div>
351
+ <div
352
+ class="col text-center"
353
+ name="total_qty_field"
354
+ colspan="2"
355
+ >
356
+ <field
357
+ name="product_qty"
358
+ force_save="1"
359
+ nolabel="1"
360
+ widget="numeric_step"
361
+ options="{'auto_select': True}"
362
+ />
341
363
  </div>
342
364
  </group>
343
365
  </group>
344
- <group
345
- name="scan_log"
346
- string="Current product scanning log"
347
- attrs="{'invisible': [('show_scan_log', '=', False)]}"
348
- >
349
- <group>
350
- <button
351
- name="action_undo_last_scan"
352
- type="object"
353
- string="Remove last yours"
354
- icon="fa-trash"
355
- />
356
- </group>
357
- <field
358
- name="scan_log_ids"
359
- options="{'no_open': True}"
360
- nolabel="1"
361
- mode="tree,kanban"
362
- >
363
- <tree>
364
- <field name="create_date" />
365
- <field name="create_uid" />
366
- <field name="name" />
367
- <field name="location_id" />
368
- <field name="product_id" />
369
- <field name="product_qty" />
370
- <field name="lot_id" />
371
- </tree>
372
- <kanban class="o_kanban_mobile">
373
- <field name="create_date" />
374
- <field name="create_uid" />
375
- <field name="product_qty" />
376
- <templates>
377
- <t t-name="kanban-box">
378
- <div t-attf-class="oe_kanban_card">
379
- <div class="row">
380
- <div class="col">
381
- <strong>
382
- <span>
383
- <t
384
- t-esc="record.create_date.value"
385
- />
386
- </span>
387
- <span>
388
- <t
389
- t-esc="record.create_uid.value"
390
- />
391
- </span>
392
- </strong>
393
- </div>
394
- <div class="col">
395
- <strong>
396
- <span
397
- class="pull-right text-right"
398
- >
399
- <t
400
- t-esc="record.product_qty.value"
401
- />
402
- </span>
403
- </strong>
404
- </div>
405
- </div>
406
- <row>
407
- <div class="col">
408
- <field name="product_id" />
409
- </div>
410
- </row>
411
- </div>
412
- </t>
413
- </templates>
414
- </kanban>
415
- </field>
416
- </group>
417
366
  </div>
418
367
  <div class="oe_stock_barcodes_bottombar d-flex">
419
368
  <field name="display_menu" invisible="1" />
@@ -421,23 +370,26 @@
421
370
  class="btn-group dropup"
422
371
  attrs="{'invisible': [('display_menu', '=', True)]}"
423
372
  >
373
+ <!-- FIXME: we can't use buttons of other tpye than object or action. Fix to achieve unfolding effect-->
424
374
  <a
425
- type="button"
375
+ role="button"
426
376
  class="btn btn-secondary dropdown-toggle d-lg-none"
427
- data-toggle="dropdown"
377
+ data-bs-toggle="dropdown"
428
378
  aria-haspopup="true"
429
379
  aria-expanded="false"
380
+ title="Options"
430
381
  >
431
382
  <i class="fa fa-cogs" />
432
383
  </a>
433
384
  <div
434
- class="dropdown-menu pl-2 pr-2 d-lg-flex-no-dropdown"
385
+ class="d-lg-flex-no-dropdown ps-2 dropdown-menu"
386
+ role="menu"
435
387
  style="min-width: 200px"
436
388
  >
437
389
  <div name="manual_entry" class="d-flex">
438
390
  <field
439
391
  name="manual_entry"
440
- widget="FieldBarcodeBooleanToggle"
392
+ widget="barcode_boolean_toggle"
441
393
  data-hotkey="5"
442
394
  />
443
395
  <label for="manual_entry">
@@ -447,60 +399,74 @@
447
399
  </div>
448
400
  </div>
449
401
  <div
450
- class="d-flex pl-1 pr-1 d-lg-none"
402
+ class="d-flex d-lg-none ps-1"
451
403
  style="width: 75px;flex-wrap: wrap;"
404
+ title="Manual entry"
452
405
  attrs="{'invisible': [('display_menu', '=', True)]}"
453
406
  >
454
407
  <i
455
408
  name="manual_entry"
456
- class="fa fa-hand-paper-o text-info mr-1"
409
+ class="fa-hand-paper-o fa text-info me-1"
457
410
  attrs="{'invisible': [('manual_entry', '=', False)]}"
458
411
  />
459
412
  </div>
460
413
  <!-- HACK: To avoid inheritance crash -->
461
414
  <button name="action_manual_entry" invisible="1" />
415
+ <!-- Hide button in view to allow do onclick in JS. Use d-none instead of
416
+ invisible attribute to be allocated by jquery selector
417
+ -->
418
+ <button
419
+ name="dummy_on_barcode_scanned"
420
+ id="dummy_on_barcode_scanned"
421
+ type="object"
422
+ data-hotkey="99"
423
+ invisible="0"
424
+ class="d-none"
425
+ />
462
426
  <!-- // -->
463
427
  <button
464
428
  name="action_clean_values"
465
429
  type="object"
466
- class="btn-warning ml-auto oe_kanban_action_button btn-sm pl-3 pr-3"
430
+ icon="fa-trash-o"
431
+ title="Clean Values"
432
+ class="btn-warning ms-auto oe_kanban_action_button btn-sm ps-3 pe-3"
467
433
  attrs="{'invisible': [('display_menu', '=', True)]}"
468
434
  data-hotkey="7"
469
435
  >
470
- <i class="fa fa-trash-o" title="Clean Values" />
471
436
  </button>
472
437
  <button
473
438
  name="action_confirm"
474
439
  type="object"
475
- class="btn-success ml-auto oe_kanban_action_button btn-sm pl-3 pr-3"
440
+ icon="fa-check"
441
+ title="Confirm"
442
+ class="btn-success ms-auto oe_kanban_action_button btn-sm ps-3 pe-3"
476
443
  attrs="{'invisible': ['|', '|','&amp;', ('is_manual_confirm', '=', False), ('manual_entry', '=', False), ('display_menu', '=', True), ('visible_force_done', '=', True)]}"
477
444
  data-hotkey="8"
478
- >
479
- <i class="fa fa-check" title="Confirm" />
480
- </button>
445
+ />
481
446
  <button
482
447
  name="action_force_done"
483
448
  type="object"
484
449
  icon="fa-check"
450
+ title="Force done"
485
451
  attrs="{'invisible': [('visible_force_done', '=', False)]}"
486
- class="btn-danger ml-auto oe_kanban_action_button btn-sm pl-3 pr-3"
452
+ class="btn-danger ms-auto oe_kanban_action_button btn-sm ps-3 pe-3"
487
453
  style="width: 50px"
488
454
  data-hotkey="8"
489
455
  />
490
456
  <button
491
457
  name="open_actions"
492
458
  type="object"
493
- class="ml-auto oe_kanban_action_button btn-sm pl-3 pr-3"
459
+ class="ms-auto oe_kanban_action_button btn-sm ps-3 pe-3"
460
+ icon="fa-bars"
461
+ title="Open actions"
494
462
  attrs="{'invisible': [('display_menu', '=', True)]}"
495
463
  data-hotkey="0"
496
- >
497
- <i class="fa fa-bars" title="Open actions" />
498
- </button>
464
+ />
499
465
  <button
500
466
  name="action_back"
501
467
  type="object"
502
468
  string="Back"
503
- class="btn-secondary ml-auto oe_kanban_action_button btn-sm"
469
+ class="btn-secondary ms-auto oe_kanban_action_button btn-sm"
504
470
  icon="fa-backward"
505
471
  attrs="{'invisible': [('display_menu', '=', False)]}"
506
472
  data-hotkey="7"
@@ -514,32 +480,47 @@
514
480
  <field name="name">stock.barcodes.read.packaging.form</field>
515
481
  <field name="model">wiz.stock.barcodes.read</field>
516
482
  <field name="inherit_id" ref="stock_barcodes.view_stock_barcodes_read_form" />
517
- <field name="groups_id" eval="[(4, ref('product.group_stock_packaging'))]" />
518
483
  <field name="arch" type="xml">
519
- <div name="total_qty_header" position="before">
520
- <div class="col text-center pr-0">
521
- <field name="product_packaging_ids" invisible="1" />
522
- <field
523
- name="packaging_id"
524
- options="{'no_open': True, 'no_create': True}"
525
- domain="[('product_id', '=', product_id)]"
526
- force_save="1"
527
- placeholder="Packaging"
528
- attrs="{'invisible': [('product_packaging_ids', '=', [])]}"
529
- />
530
- </div>
531
- </div>
532
- <div name="total_qty_field" position="before">
533
- <div class="col text-center">
534
- <field
535
- name="packaging_qty"
536
- force_save="1"
537
- widget="numeric_step"
538
- options="{'auto_select': True}"
539
- attrs="{'invisible': [('product_packaging_ids', '=', [])]}"
540
- />
484
+ <group name="option_qty" position="before">
485
+ <group name="packaging" col="1">
486
+ <div colspan="2" groups="product.group_stock_packaging">
487
+ <field name="product_packaging_ids" invisible="1" />
488
+ <span
489
+ class="fa fa-archive d-sm-none oe_span_small_icon"
490
+ title="Source Location"
491
+ attrs="{'invisible': [('product_packaging_ids', '=', [])]}"
492
+ />
493
+ <field
494
+ name="packaging_id"
495
+ options="{'no_open': True, 'no_create': True}"
496
+ domain="[('product_id', '=', product_id)]"
497
+ force_save="1"
498
+ style="width: 85%"
499
+ class="h5"
500
+ placeholder="Packaging"
501
+ nolabel="1"
502
+ attrs="{'invisible': [('product_packaging_ids', '=', [])]}"
503
+ />
504
+ </div>
505
+ </group>
506
+ </group>
507
+ <xpath
508
+ expr="//div[@name='total_qty_field']//field[@name='product_qty']"
509
+ position="before"
510
+ >
511
+ <field
512
+ name="packaging_qty"
513
+ force_save="1"
514
+ widget="numeric_step"
515
+ options="{'auto_select': True}"
516
+ groups="product.group_stock_packaging"
517
+ attrs="{'invisible': [('product_packaging_ids', '=', [])]}"
518
+ />
519
+ </xpath>
520
+ <!-- <div name="total_qty_field" position="before">
521
+ <div class="col text-center" groups="product.group_stock_packaging">
541
522
  </div>
542
- </div>
523
+ </div> -->
543
524
  </field>
544
525
  </record>
545
526
  <!--
@@ -566,22 +547,24 @@
566
547
  name="packaging_qty"
567
548
  attrs="{'invisible': [('packaging_id', '=', False)]}"
568
549
  force_save="1"
550
+ nolabel="1"
569
551
  widget="numeric_step"
570
552
  options="{'auto_select': True}"
571
553
  />
572
554
  <field
573
555
  name="product_qty"
574
556
  force_save="1"
557
+ nolabel="1"
575
558
  widget="numeric_step"
576
559
  options="{'auto_select': True}"
577
560
  />
578
561
  <button
579
562
  name="action_reopen_wizard"
580
563
  type="object"
564
+ icon="fa-check"
565
+ title="Reopen"
581
566
  class="btn-success"
582
- >
583
- <i class="fa fa-check" title="Reopen" />
584
- </button>
567
+ />
585
568
  </sheet>
586
569
  </form>
587
570
  </field>