odoo-addon-shopfloor 16.0.2.2.0__py3-none-any.whl → 16.0.2.2.1.5__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 (28) hide show
  1. odoo/addons/shopfloor/README.rst +1 -1
  2. odoo/addons/shopfloor/__manifest__.py +1 -1
  3. odoo/addons/shopfloor/actions/move_line_search.py +125 -33
  4. odoo/addons/shopfloor/data/shopfloor_scenario_data.xml +7 -2
  5. odoo/addons/shopfloor/i18n/ca.po +106 -4
  6. odoo/addons/shopfloor/i18n/de.po +104 -2
  7. odoo/addons/shopfloor/i18n/es_AR.po +108 -6
  8. odoo/addons/shopfloor/i18n/it.po +108 -6
  9. odoo/addons/shopfloor/i18n/pt_BR.po +104 -2
  10. odoo/addons/shopfloor/i18n/shopfloor.pot +102 -0
  11. odoo/addons/shopfloor/migrations/16.0.2.2.1/post-init_search_move_line_options.py +33 -0
  12. odoo/addons/shopfloor/models/shopfloor_menu.py +85 -0
  13. odoo/addons/shopfloor/services/location_content_transfer.py +20 -41
  14. odoo/addons/shopfloor/services/menu.py +6 -3
  15. odoo/addons/shopfloor/services/service.py +28 -2
  16. odoo/addons/shopfloor/services/zone_picking.py +2 -2
  17. odoo/addons/shopfloor/static/description/index.html +1 -1
  18. odoo/addons/shopfloor/tests/__init__.py +2 -0
  19. odoo/addons/shopfloor/tests/test_actions_search_move_line.py +128 -0
  20. odoo/addons/shopfloor/tests/test_location_content_transfer_get_work.py +41 -0
  21. odoo/addons/shopfloor/tests/test_location_content_transfer_mix.py +2 -2
  22. odoo/addons/shopfloor/tests/test_menu_contrains.py +40 -0
  23. odoo/addons/shopfloor/tests/test_menu_counters.py +112 -2
  24. odoo/addons/shopfloor/views/shopfloor_menu.xml +54 -0
  25. {odoo_addon_shopfloor-16.0.2.2.0.dist-info → odoo_addon_shopfloor-16.0.2.2.1.5.dist-info}/METADATA +2 -2
  26. {odoo_addon_shopfloor-16.0.2.2.0.dist-info → odoo_addon_shopfloor-16.0.2.2.1.5.dist-info}/RECORD +28 -25
  27. {odoo_addon_shopfloor-16.0.2.2.0.dist-info → odoo_addon_shopfloor-16.0.2.2.1.5.dist-info}/WHEEL +0 -0
  28. {odoo_addon_shopfloor-16.0.2.2.0.dist-info → odoo_addon_shopfloor-16.0.2.2.1.5.dist-info}/top_level.txt +0 -0
@@ -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:8c610188b1ca56f5f11da8e51e3fd390897186bc38eed9c6246f4cc394dccda1
10
+ !! source digest: sha256:bb5933746c40b25c45fcadac4704a1a752a86c48bb857969ca935196736d24c6
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -6,7 +6,7 @@
6
6
  {
7
7
  "name": "Shopfloor",
8
8
  "summary": "manage warehouse operations with barcode scanners",
9
- "version": "16.0.2.2.0",
9
+ "version": "16.0.2.2.1",
10
10
  "development_status": "Beta",
11
11
  "category": "Inventory",
12
12
  "website": "https://github.com/OCA/wms",
@@ -1,5 +1,8 @@
1
1
  # Copyright 2020 Camptocamp SA (http://www.camptocamp.com)
2
+ # Copyright 2024 ACSONE SA/NV
2
3
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+ from odoo.tools import safe_eval
5
+
3
6
  from odoo.addons.component.core import Component
4
7
 
5
8
 
@@ -20,9 +23,42 @@ class MoveLineSearch(Component):
20
23
  self.work, "picking_types", self.env["stock.picking.type"].browse()
21
24
  )
22
25
 
23
- def _search_move_lines_by_location_domain(
26
+ @property
27
+ def additional_domain(self):
28
+ return getattr(self.work, "additional_domain", [])
29
+
30
+ @property
31
+ def sort_order(self):
32
+ return getattr(self.work, "sort_order", "priority")
33
+
34
+ @property
35
+ def sort_order_custom_code(self):
36
+ return getattr(self.work, "sort_order_custom_code", None)
37
+
38
+ def _get_additional_domain_eval_context(self):
39
+ """Prepare the context used when evaluating the additional domain
40
+ :returns: dict -- evaluation context given to safe_eval
41
+ """
42
+ return {
43
+ "datetime": safe_eval.datetime,
44
+ "dateutil": safe_eval.dateutil,
45
+ "time": safe_eval.time,
46
+ "uid": self.env.uid,
47
+ "user": self.env.user,
48
+ }
49
+
50
+ def _sort_key_custom_code_eval_context(self, line):
51
+ return {
52
+ "line": line,
53
+ "key": None,
54
+ "get_sort_key_priority": self._sort_key_move_lines_priority,
55
+ "get_sort_key_location": self._sort_key_move_lines_location,
56
+ "get_sort_key_assigned_to_current_user": self._sort_key_assigned_to_current_user,
57
+ }
58
+
59
+ def _search_move_lines_domain(
24
60
  self,
25
- locations,
61
+ locations=None,
26
62
  picking_type=None,
27
63
  package=None,
28
64
  product=None,
@@ -32,16 +68,26 @@ class MoveLineSearch(Component):
32
68
  # When True, adds the package in the domain even if the package is False
33
69
  enforce_empty_package=False,
34
70
  ):
71
+ """Return a domain to search move lines.
72
+
73
+ Be careful on the use of the picking_type parameter. This paramater can take
74
+ a recordset or None as value. The interpretation of the value is as follows:
75
+ * If picking_type is None, the domain will be filtered on all picking types
76
+ defined in the work. (most probably those defined on the menu)
77
+ * If picking_type is a recordset, the domain will be filtered on the given
78
+ picking types if the recordset is not empty. If the recordset is empty,
79
+ the domain will not be filtered on any picking type.
80
+ """
35
81
  domain = [
36
- ("location_id", "child_of", locations.ids),
37
82
  ("qty_done", "=", 0),
38
83
  ("state", "in", ("assigned", "partially_available")),
39
84
  ]
40
- if picking_type:
41
- # auto_join in place for this field
42
- domain += [("picking_id.picking_type_id", "=", picking_type.id)]
43
- elif self.picking_types:
44
- domain += [("picking_id.picking_type_id", "in", self.picking_types.ids)]
85
+ picking_types = picking_type if picking_type is not None else self.picking_types
86
+ if picking_types:
87
+ domain += [("picking_id.picking_type_id", "in", picking_types.ids)]
88
+ locations = locations or picking_types.default_location_src_id
89
+ if locations:
90
+ domain += [("location_id", "child_of", locations.ids)]
45
91
  if package or package is not None and enforce_empty_package:
46
92
  domain += [("package_id", "=", package.id if package else False)]
47
93
  if product:
@@ -49,23 +95,26 @@ class MoveLineSearch(Component):
49
95
  if lot:
50
96
  domain += [("lot_id", "=", lot.id)]
51
97
  if match_user:
98
+ # we only want to see the lines assigned to the current user
52
99
  domain += [
53
- "|",
54
- ("shopfloor_user_id", "=", False),
55
- ("shopfloor_user_id", "=", self.env.uid),
100
+ ("shopfloor_user_id", "in", (False, self.env.uid)),
101
+ ("picking_id.user_id", "in", (False, self.env.uid)),
56
102
  ]
57
103
  if picking_ready:
58
104
  domain += [("picking_id.state", "=", "assigned")]
105
+ if self.additional_domain:
106
+ eval_context = self._get_additional_domain_eval_context()
107
+ domain += safe_eval.safe_eval(self.additional_domain, eval_context)
59
108
  return domain
60
109
 
61
- def search_move_lines_by_location(
110
+ def search_move_lines(
62
111
  self,
63
- locations,
112
+ locations=None,
64
113
  picking_type=None,
65
114
  package=None,
66
115
  product=None,
67
116
  lot=None,
68
- order="priority",
117
+ order=None,
69
118
  match_user=False,
70
119
  sort_keys_func=None,
71
120
  picking_ready=True,
@@ -73,7 +122,7 @@ class MoveLineSearch(Component):
73
122
  ):
74
123
  """Find lines that potentially need work in given locations."""
75
124
  move_lines = self.env["stock.move.line"].search(
76
- self._search_move_lines_by_location_domain(
125
+ self._search_move_lines_domain(
77
126
  locations,
78
127
  picking_type,
79
128
  package,
@@ -84,36 +133,79 @@ class MoveLineSearch(Component):
84
133
  enforce_empty_package=enforce_empty_package,
85
134
  )
86
135
  )
136
+ order = order or self.sort_order
87
137
  sort_keys_func = sort_keys_func or self._sort_key_move_lines(order)
88
138
  move_lines = move_lines.sorted(sort_keys_func)
89
139
  return move_lines
90
140
 
91
- @staticmethod
92
- def _sort_key_move_lines(order):
141
+ def _sort_key_move_lines(self, order=None):
93
142
  """Return a sorting function to order lines."""
143
+ if order is None:
144
+ return lambda line: tuple()
94
145
 
95
146
  if order == "priority":
96
- # make prority negative to keep sorting ascending
97
- return lambda line: (
98
- -int(line.move_id.priority or "0"),
99
- line.move_id.date,
100
- line.move_id.id,
101
- )
102
- elif order == "location":
103
- return lambda line: (
104
- line.location_id.shopfloor_picking_sequence or "",
105
- line.location_id.name,
106
- line.move_id.date,
107
- line.move_id.id,
108
- )
109
- return lambda line: line
147
+ return self._sort_key_move_lines_priority
148
+
149
+ if order == "location":
150
+ return self._sort_key_move_lines_location
151
+
152
+ if order == "custom_code":
153
+ return self._sort_key_custom_code
154
+
155
+ if order == "assigned_to_current_user":
156
+ return self._sort_key_assigned_to_current_user
157
+
158
+ raise ValueError(f"Unknown order '{order}'")
159
+
160
+ def _sort_key_move_lines_priority(self, line):
161
+ # make prority negative to keep sorting ascending
162
+ return self._sort_key_assigned_to_current_user(line) + (
163
+ -int(line.move_id.priority or "0"),
164
+ line.move_id.date,
165
+ line.move_id.id,
166
+ )
167
+
168
+ def _sort_key_move_lines_location(self, line):
169
+ return self._sort_key_assigned_to_current_user(line) + (
170
+ line.location_id.shopfloor_picking_sequence or "",
171
+ line.location_id.name,
172
+ line.move_id.date,
173
+ line.move_id.id,
174
+ )
175
+
176
+ def _sort_key_assigned_to_current_user(self, line):
177
+ user_id = line.shopfloor_user_id.id or line.picking_id.user_id.id or None
178
+ # Determine sort priority
179
+ # Priority 0: Assigned to the current user
180
+ # Priority 1: Not assigned to any user
181
+ # Priority 2: Assigned to a different user
182
+ if user_id == self.env.uid:
183
+ priority = 0
184
+ elif user_id is None:
185
+ priority = 1
186
+ else:
187
+ priority = 2
188
+ return (priority,)
189
+
190
+ def _sort_key_custom_code(self, line):
191
+ context = self._sort_key_custom_code_eval_context(line)
192
+ safe_eval.safe_eval(
193
+ self.sort_order_custom_code, context, mode="exec", nocopy=True
194
+ )
195
+ return context["key"]
110
196
 
111
197
  def counters_for_lines(self, lines):
112
198
  # Not using mapped/filtered to support simple lists and generators
113
- priority_lines = [x for x in lines if int(x.picking_id.priority or "0") > 0]
199
+ priority_lines = set()
200
+ priority_pickings = set()
201
+ for line in lines:
202
+ if int(line.move_id.priority or "0") > 0:
203
+ priority_lines.add(line)
204
+ if int(line.picking_id.priority or "0") > 0:
205
+ priority_pickings.add(line.picking_id)
114
206
  return {
115
207
  "lines_count": len(lines),
116
208
  "picking_count": len({x.picking_id.id for x in lines}),
117
209
  "priority_lines_count": len(priority_lines),
118
- "priority_picking_count": len({x.picking_id.id for x in priority_lines}),
210
+ "priority_picking_count": len(priority_pickings),
119
211
  }
@@ -21,7 +21,9 @@
21
21
  "multiple_move_single_pack": true,
22
22
  "no_prefill_qty": true,
23
23
  "scan_location_or_pack_first": true,
24
- "allow_alternative_destination_package": true
24
+ "allow_alternative_destination_package": true,
25
+ "allow_move_line_search_sort_order": false,
26
+ "allow_move_line_search_additional_domain": true
25
27
  }
26
28
  </field>
27
29
  </record>
@@ -68,7 +70,10 @@
68
70
  "allow_unreserve_other_moves": true,
69
71
  "allow_ignore_no_putaway_available": true,
70
72
  "allow_get_work": true,
71
- "no_prefill_qty": true
73
+ "no_prefill_qty": true,
74
+ "allow_move_line_search_sort_order": true,
75
+ "allow_move_line_search_additional_domain": true
76
+
72
77
  }
73
78
  </field>
74
79
  </record>
@@ -116,6 +116,32 @@ msgid ""
116
116
  "destination'."
117
117
  msgstr ""
118
118
 
119
+ #. module: shopfloor
120
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
121
+ msgid ""
122
+ "<code>get_sort_key_assigned_to_current_user</code>: Return sort key to get "
123
+ "line assigned to current user first. (return a tuple)"
124
+ msgstr ""
125
+
126
+ #. module: shopfloor
127
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
128
+ msgid ""
129
+ "<code>get_sort_key_location</code>: Return sort key to sort by location. "
130
+ "(return a tuple)"
131
+ msgstr ""
132
+
133
+ #. module: shopfloor
134
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
135
+ msgid ""
136
+ "<code>get_sort_key_priority</code>: Return sort key to sort by priority. "
137
+ "(return a tuple)"
138
+ msgstr ""
139
+
140
+ #. module: shopfloor
141
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
142
+ msgid "<code>line</code>: The move line for with the key must be computed."
143
+ msgstr ""
144
+
119
145
  #. module: shopfloor
120
146
  #: model:ir.model,name:shopfloor.model_shopfloor_app
121
147
  msgid "A Shopfloor application"
@@ -133,6 +159,11 @@ msgstr "Es requereix un paquet destí."
133
159
  msgid "Activate Zero Check"
134
160
  msgstr "Activar verificació zero"
135
161
 
162
+ #. module: shopfloor
163
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_additional_domain
164
+ msgid "Additional domain used when searching move lines"
165
+ msgstr ""
166
+
136
167
  #. module: shopfloor
137
168
  #: model:ir.model,name:shopfloor.model_shopfloor_priority_postpone_mixin
138
169
  msgid "Adds shopfloor priority/postpone fields"
@@ -330,6 +361,35 @@ msgstr ""
330
361
  msgid "Creation of moves is not allowed for menu {}."
331
362
  msgstr "La creació de moviments no està permesa pel menú {}."
332
363
 
364
+ #. module: shopfloor
365
+ #: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__custom_code
366
+ msgid "Custom code"
367
+ msgstr ""
368
+
369
+ #. module: shopfloor
370
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
371
+ msgid "Custom code to construct the key to sort move lines"
372
+ msgstr ""
373
+
374
+ #. module: shopfloor
375
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order_custom_code
376
+ msgid "Custom sort key code"
377
+ msgstr ""
378
+
379
+ #. module: shopfloor
380
+ #. odoo-python
381
+ #: code:addons/shopfloor/models/shopfloor_menu.py:0
382
+ #, python-format
383
+ msgid "Custom sort key code is only allowed when 'Custom code' is selected."
384
+ msgstr ""
385
+
386
+ #. module: shopfloor
387
+ #. odoo-python
388
+ #: code:addons/shopfloor/models/shopfloor_menu.py:0
389
+ #, python-format
390
+ msgid "Custom sort key code is required when 'Custom code' is selected."
391
+ msgstr ""
392
+
333
393
  #. module: shopfloor
334
394
  #: model:ir.model.fields,field_description:shopfloor.field_stock_move_line__date_planned
335
395
  msgid "Date Scheduled"
@@ -468,6 +528,11 @@ msgstr ""
468
528
  msgid "Lines have different destination location."
469
529
  msgstr ""
470
530
 
531
+ #. module: shopfloor
532
+ #: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__location
533
+ msgid "Location"
534
+ msgstr ""
535
+
471
536
  #. module: shopfloor
472
537
  #. odoo-python
473
538
  #: code:addons/shopfloor/actions/message.py:0
@@ -593,6 +658,16 @@ msgstr ""
593
658
  msgid "Move Line Count"
594
659
  msgstr ""
595
660
 
661
+ #. module: shopfloor
662
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_additional_domain_is_possible
663
+ msgid "Move Line Search Additional Domain Is Possible"
664
+ msgstr ""
665
+
666
+ #. module: shopfloor
667
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order_is_possible
668
+ msgid "Move Line Search Sort Order Is Possible"
669
+ msgstr ""
670
+
596
671
  #. module: shopfloor
597
672
  #. odoo-python
598
673
  #: code:addons/shopfloor/actions/message.py:0
@@ -1093,6 +1168,11 @@ msgstr ""
1093
1168
  msgid "Prepackaged Product Is Possible"
1094
1169
  msgstr ""
1095
1170
 
1171
+ #. module: shopfloor
1172
+ #: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__priority
1173
+ msgid "Priority"
1174
+ msgstr ""
1175
+
1096
1176
  #. module: shopfloor
1097
1177
  #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__allow_prepackaged_product
1098
1178
  msgid "Process as pre-packaged"
@@ -1154,6 +1234,11 @@ msgstr ""
1154
1234
  msgid "Product(s) processed as raw product(s)"
1155
1235
  msgstr ""
1156
1236
 
1237
+ #. module: shopfloor
1238
+ #: model:ir.model.fields,help:shopfloor.field_shopfloor_menu__move_line_search_sort_order_custom_code
1239
+ msgid "Python code to sort move lines. "
1240
+ msgstr ""
1241
+
1157
1242
  #. module: shopfloor
1158
1243
  #: model:ir.model,name:shopfloor.model_stock_quant
1159
1244
  msgid "Quants"
@@ -1427,6 +1512,11 @@ msgstr ""
1427
1512
  msgid "Someone is already working on these transfers"
1428
1513
  msgstr ""
1429
1514
 
1515
+ #. module: shopfloor
1516
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order
1517
+ msgid "Sort method used when searching move lines"
1518
+ msgstr ""
1519
+
1430
1520
  #. module: shopfloor
1431
1521
  #: model:ir.model.fields,field_description:shopfloor.field_stock_location__source_move_line_ids
1432
1522
  msgid "Source Move Line"
@@ -1506,8 +1596,8 @@ msgstr ""
1506
1596
  #: code:addons/shopfloor/models/stock_picking.py:0
1507
1597
  #, python-format
1508
1598
  msgid ""
1509
- "The backorder <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id="
1510
- "\"%(new_picking_id)d\">%(new_picking_name)s</a> has been created."
1599
+ "The backorder <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-"
1600
+ "id=\"%(new_picking_id)d\">%(new_picking_name)s</a> has been created."
1511
1601
  msgstr ""
1512
1602
 
1513
1603
  #. module: shopfloor
@@ -1740,6 +1830,18 @@ msgstr ""
1740
1830
  msgid "This transfer does not exist or is not available anymore."
1741
1831
  msgstr ""
1742
1832
 
1833
+ #. module: shopfloor
1834
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
1835
+ msgid "Three variables are available:"
1836
+ msgstr ""
1837
+
1838
+ #. module: shopfloor
1839
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
1840
+ msgid ""
1841
+ "To assign the key value: <code>key = "
1842
+ "get_sort_key_assigned_to_current_user(line) + (line.x, )</code>"
1843
+ msgstr ""
1844
+
1743
1845
  #. module: shopfloor
1744
1846
  #: model:ir.model.fields,field_description:shopfloor.field_stock_picking__total_weight
1745
1847
  #: model:ir.model.fields,field_description:shopfloor.field_stock_picking_batch__total_weight
@@ -2025,8 +2127,8 @@ msgstr ""
2025
2127
  #~ msgstr "ID"
2026
2128
 
2027
2129
  #~ msgid ""
2028
- #~ "Created from backorder <a href=# data-oe-model=stock.picking data-oe-id="
2029
- #~ "%d>%s</a>."
2130
+ #~ "Created from backorder <a href=# data-oe-model=stock.picking data-oe-"
2131
+ #~ "id=%d>%s</a>."
2030
2132
  #~ msgstr ""
2031
2133
  #~ "Creat des de comanda pendent <a href=# data-oe-model=stock.picking data-"
2032
2134
  #~ "oe-id=%d>%s</a>."
@@ -114,6 +114,32 @@ msgid ""
114
114
  "destination'."
115
115
  msgstr ""
116
116
 
117
+ #. module: shopfloor
118
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
119
+ msgid ""
120
+ "<code>get_sort_key_assigned_to_current_user</code>: Return sort key to get "
121
+ "line assigned to current user first. (return a tuple)"
122
+ msgstr ""
123
+
124
+ #. module: shopfloor
125
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
126
+ msgid ""
127
+ "<code>get_sort_key_location</code>: Return sort key to sort by location. "
128
+ "(return a tuple)"
129
+ msgstr ""
130
+
131
+ #. module: shopfloor
132
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
133
+ msgid ""
134
+ "<code>get_sort_key_priority</code>: Return sort key to sort by priority. "
135
+ "(return a tuple)"
136
+ msgstr ""
137
+
138
+ #. module: shopfloor
139
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
140
+ msgid "<code>line</code>: The move line for with the key must be computed."
141
+ msgstr ""
142
+
117
143
  #. module: shopfloor
118
144
  #: model:ir.model,name:shopfloor.model_shopfloor_app
119
145
  msgid "A Shopfloor application"
@@ -131,6 +157,11 @@ msgstr ""
131
157
  msgid "Activate Zero Check"
132
158
  msgstr ""
133
159
 
160
+ #. module: shopfloor
161
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_additional_domain
162
+ msgid "Additional domain used when searching move lines"
163
+ msgstr ""
164
+
134
165
  #. module: shopfloor
135
166
  #: model:ir.model,name:shopfloor.model_shopfloor_priority_postpone_mixin
136
167
  msgid "Adds shopfloor priority/postpone fields"
@@ -328,6 +359,35 @@ msgstr ""
328
359
  msgid "Creation of moves is not allowed for menu {}."
329
360
  msgstr ""
330
361
 
362
+ #. module: shopfloor
363
+ #: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__custom_code
364
+ msgid "Custom code"
365
+ msgstr ""
366
+
367
+ #. module: shopfloor
368
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
369
+ msgid "Custom code to construct the key to sort move lines"
370
+ msgstr ""
371
+
372
+ #. module: shopfloor
373
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order_custom_code
374
+ msgid "Custom sort key code"
375
+ msgstr ""
376
+
377
+ #. module: shopfloor
378
+ #. odoo-python
379
+ #: code:addons/shopfloor/models/shopfloor_menu.py:0
380
+ #, python-format
381
+ msgid "Custom sort key code is only allowed when 'Custom code' is selected."
382
+ msgstr ""
383
+
384
+ #. module: shopfloor
385
+ #. odoo-python
386
+ #: code:addons/shopfloor/models/shopfloor_menu.py:0
387
+ #, python-format
388
+ msgid "Custom sort key code is required when 'Custom code' is selected."
389
+ msgstr ""
390
+
331
391
  #. module: shopfloor
332
392
  #: model:ir.model.fields,field_description:shopfloor.field_stock_move_line__date_planned
333
393
  msgid "Date Scheduled"
@@ -464,6 +524,11 @@ msgstr ""
464
524
  msgid "Lines have different destination location."
465
525
  msgstr ""
466
526
 
527
+ #. module: shopfloor
528
+ #: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__location
529
+ msgid "Location"
530
+ msgstr ""
531
+
467
532
  #. module: shopfloor
468
533
  #. odoo-python
469
534
  #: code:addons/shopfloor/actions/message.py:0
@@ -589,6 +654,16 @@ msgstr ""
589
654
  msgid "Move Line Count"
590
655
  msgstr ""
591
656
 
657
+ #. module: shopfloor
658
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_additional_domain_is_possible
659
+ msgid "Move Line Search Additional Domain Is Possible"
660
+ msgstr ""
661
+
662
+ #. module: shopfloor
663
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order_is_possible
664
+ msgid "Move Line Search Sort Order Is Possible"
665
+ msgstr ""
666
+
592
667
  #. module: shopfloor
593
668
  #. odoo-python
594
669
  #: code:addons/shopfloor/actions/message.py:0
@@ -1089,6 +1164,11 @@ msgstr ""
1089
1164
  msgid "Prepackaged Product Is Possible"
1090
1165
  msgstr ""
1091
1166
 
1167
+ #. module: shopfloor
1168
+ #: model:ir.model.fields.selection,name:shopfloor.selection__shopfloor_menu__move_line_search_sort_order__priority
1169
+ msgid "Priority"
1170
+ msgstr ""
1171
+
1092
1172
  #. module: shopfloor
1093
1173
  #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__allow_prepackaged_product
1094
1174
  msgid "Process as pre-packaged"
@@ -1150,6 +1230,11 @@ msgstr ""
1150
1230
  msgid "Product(s) processed as raw product(s)"
1151
1231
  msgstr ""
1152
1232
 
1233
+ #. module: shopfloor
1234
+ #: model:ir.model.fields,help:shopfloor.field_shopfloor_menu__move_line_search_sort_order_custom_code
1235
+ msgid "Python code to sort move lines. "
1236
+ msgstr ""
1237
+
1153
1238
  #. module: shopfloor
1154
1239
  #: model:ir.model,name:shopfloor.model_stock_quant
1155
1240
  msgid "Quants"
@@ -1423,6 +1508,11 @@ msgstr ""
1423
1508
  msgid "Someone is already working on these transfers"
1424
1509
  msgstr ""
1425
1510
 
1511
+ #. module: shopfloor
1512
+ #: model:ir.model.fields,field_description:shopfloor.field_shopfloor_menu__move_line_search_sort_order
1513
+ msgid "Sort method used when searching move lines"
1514
+ msgstr ""
1515
+
1426
1516
  #. module: shopfloor
1427
1517
  #: model:ir.model.fields,field_description:shopfloor.field_stock_location__source_move_line_ids
1428
1518
  msgid "Source Move Line"
@@ -1502,8 +1592,8 @@ msgstr ""
1502
1592
  #: code:addons/shopfloor/models/stock_picking.py:0
1503
1593
  #, python-format
1504
1594
  msgid ""
1505
- "The backorder <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id="
1506
- "\"%(new_picking_id)d\">%(new_picking_name)s</a> has been created."
1595
+ "The backorder <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-"
1596
+ "id=\"%(new_picking_id)d\">%(new_picking_name)s</a> has been created."
1507
1597
  msgstr ""
1508
1598
 
1509
1599
  #. module: shopfloor
@@ -1736,6 +1826,18 @@ msgstr ""
1736
1826
  msgid "This transfer does not exist or is not available anymore."
1737
1827
  msgstr ""
1738
1828
 
1829
+ #. module: shopfloor
1830
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
1831
+ msgid "Three variables are available:"
1832
+ msgstr ""
1833
+
1834
+ #. module: shopfloor
1835
+ #: model_terms:ir.ui.view,arch_db:shopfloor.shopfloor_menu_form_view
1836
+ msgid ""
1837
+ "To assign the key value: <code>key = "
1838
+ "get_sort_key_assigned_to_current_user(line) + (line.x, )</code>"
1839
+ msgstr ""
1840
+
1739
1841
  #. module: shopfloor
1740
1842
  #: model:ir.model.fields,field_description:shopfloor.field_stock_picking__total_weight
1741
1843
  #: model:ir.model.fields,field_description:shopfloor.field_stock_picking_batch__total_weight