\n"
@@ -37,7 +37,7 @@ msgstr ""
#: order/templates/order/so_sidebar.html:17
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:172
-#: stock/models.py:2000 stock/models.py:2108 stock/serializers.py:327
+#: stock/models.py:1947 stock/models.py:2055 stock/serializers.py:327
#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823
#: stock/serializers.py:922 stock/serializers.py:1054
#: stock/templates/stock/stock_sidebar.html:25
@@ -46,7 +46,7 @@ msgstr ""
#: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555
#: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004
#: templates/js/translated/order.js:4402 templates/js/translated/stock.js:1374
-#: templates/js/translated/stock.js:1976
+#: templates/js/translated/stock.js:1978
msgid "Notes"
msgstr ""
@@ -91,81 +91,81 @@ msgstr ""
msgid "You must type the same email each time."
msgstr ""
-#: InvenTree/helpers.py:175
+#: InvenTree/helpers.py:158
msgid "Connection error"
msgstr ""
-#: InvenTree/helpers.py:179 InvenTree/helpers.py:184
+#: InvenTree/helpers.py:162 InvenTree/helpers.py:167
msgid "Server responded with invalid status code"
msgstr ""
-#: InvenTree/helpers.py:181
+#: InvenTree/helpers.py:164
msgid "Exception occurred"
msgstr ""
-#: InvenTree/helpers.py:189
+#: InvenTree/helpers.py:172
msgid "Server responded with invalid Content-Length value"
msgstr ""
-#: InvenTree/helpers.py:192
+#: InvenTree/helpers.py:175
msgid "Image size is too large"
msgstr ""
-#: InvenTree/helpers.py:204
+#: InvenTree/helpers.py:187
msgid "Image download exceeded maximum size"
msgstr ""
-#: InvenTree/helpers.py:209
+#: InvenTree/helpers.py:192
msgid "Remote server returned empty response"
msgstr ""
-#: InvenTree/helpers.py:217
+#: InvenTree/helpers.py:200
msgid "Supplied URL is not a valid image file"
msgstr ""
-#: InvenTree/helpers.py:600
+#: InvenTree/helpers.py:583
#, python-brace-format
msgid "Duplicate serial: {sn}"
msgstr ""
-#: InvenTree/helpers.py:607 order/models.py:320 order/models.py:472
+#: InvenTree/helpers.py:590 order/models.py:320 order/models.py:472
msgid "Invalid quantity provided"
msgstr ""
-#: InvenTree/helpers.py:610
+#: InvenTree/helpers.py:593
msgid "Empty serial number string"
msgstr ""
-#: InvenTree/helpers.py:642
+#: InvenTree/helpers.py:625
#, python-brace-format
msgid "Invalid group range: {g}"
msgstr ""
-#: InvenTree/helpers.py:645
+#: InvenTree/helpers.py:628
#, python-brace-format
msgid "Invalid group: {g}"
msgstr ""
-#: InvenTree/helpers.py:673
+#: InvenTree/helpers.py:656
#, python-brace-format
msgid "Invalid group sequence: {g}"
msgstr ""
-#: InvenTree/helpers.py:681
+#: InvenTree/helpers.py:664
#, python-brace-format
msgid "Invalid/no group {group}"
msgstr ""
-#: InvenTree/helpers.py:687
+#: InvenTree/helpers.py:670
msgid "No serial numbers found"
msgstr ""
-#: InvenTree/helpers.py:691
+#: InvenTree/helpers.py:674
#, python-brace-format
msgid "Number of unique serial numbers ({s}) must match quantity ({q})"
msgstr ""
-#: InvenTree/helpers.py:890
+#: InvenTree/helpers.py:873
msgid "Remove HTML tags from this value"
msgstr ""
@@ -201,7 +201,7 @@ msgstr ""
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:395 stock/models.py:2102
+#: InvenTree/models.py:395 stock/models.py:2049
#: templates/js/translated/attachment.js:103
#: templates/js/translated/attachment.js:241
msgid "Attachment"
@@ -217,12 +217,12 @@ msgstr ""
#: report/templates/report/inventree_build_order_base.html:164
#: templates/js/translated/company.js:691
#: templates/js/translated/company.js:1011
-#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1563
+#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567
msgid "Link"
msgstr ""
-#: InvenTree/models.py:403 build/models.py:296 part/models.py:803
-#: stock/models.py:658
+#: InvenTree/models.py:403 build/models.py:285 part/models.py:803
+#: stock/models.py:605
msgid "Link to external URL"
msgstr ""
@@ -237,10 +237,10 @@ msgstr ""
#: InvenTree/models.py:412 InvenTree/models.py:413 common/models.py:1669
#: common/models.py:1670 common/models.py:1893 common/models.py:1894
-#: common/models.py:2156 common/models.py:2157 part/models.py:2247
-#: part/models.py:2267 plugin/models.py:260 plugin/models.py:261
+#: common/models.py:2156 common/models.py:2157 part/models.py:2235
+#: part/models.py:2255 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
-#: templates/js/translated/stock.js:2637
+#: templates/js/translated/stock.js:2645
msgid "User"
msgstr ""
@@ -277,9 +277,9 @@ msgstr ""
msgid "Invalid choice"
msgstr ""
-#: InvenTree/models.py:537 InvenTree/models.py:538 common/models.py:1879
+#: InvenTree/models.py:547 InvenTree/models.py:548 common/models.py:1879
#: company/models.py:358 label/models.py:101 part/models.py:746
-#: part/models.py:2425 plugin/models.py:94 report/models.py:152
+#: part/models.py:2413 plugin/models.py:94 report/models.py:152
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin.html:134
@@ -289,57 +289,77 @@ msgstr ""
#: templates/js/translated/company.js:793
#: templates/js/translated/notification.js:71
#: templates/js/translated/part.js:686 templates/js/translated/part.js:838
-#: templates/js/translated/part.js:1955 templates/js/translated/stock.js:2388
+#: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2390
msgid "Name"
msgstr ""
-#: InvenTree/models.py:544 build/models.py:174
+#: InvenTree/models.py:554 build/models.py:163
#: build/templates/build/detail.html:24 company/models.py:282
#: company/models.py:517 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
-#: company/templates/company/supplier_part.html:92 label/models.py:108
-#: order/models.py:82 part/models.py:769 part/models.py:2437
-#: part/templates/part/category.html:80 part/templates/part/part_base.html:167
+#: company/templates/company/supplier_part.html:108 label/models.py:108
+#: order/models.py:82 part/models.py:769 part/models.py:2425
+#: part/templates/part/category.html:80 part/templates/part/part_base.html:172
#: part/templates/part/part_scheduling.html:12 report/models.py:165
#: report/models.py:507 report/models.py:551
#: report/templates/report/inventree_build_order_base.html:117
-#: stock/templates/stock/location.html:108
+#: stock/templates/stock/location.html:113
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/InvenTree/settings/settings.html:358
#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:846
-#: templates/js/translated/build.js:2512 templates/js/translated/company.js:444
+#: templates/js/translated/build.js:2528 templates/js/translated/company.js:444
#: templates/js/translated/company.js:702
#: templates/js/translated/company.js:986 templates/js/translated/order.js:1988
#: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831
#: templates/js/translated/part.js:745 templates/js/translated/part.js:1187
-#: templates/js/translated/part.js:1463 templates/js/translated/part.js:1991
-#: templates/js/translated/part.js:2060 templates/js/translated/stock.js:1743
-#: templates/js/translated/stock.js:2420 templates/js/translated/stock.js:2474
+#: templates/js/translated/part.js:1462 templates/js/translated/part.js:1996
+#: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1744
+#: templates/js/translated/stock.js:2422 templates/js/translated/stock.js:2482
msgid "Description"
msgstr ""
-#: InvenTree/models.py:545
+#: InvenTree/models.py:555
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:553
+#: InvenTree/models.py:563
msgid "parent"
msgstr ""
-#: InvenTree/models.py:560 InvenTree/models.py:561
-#: templates/js/translated/part.js:1997 templates/js/translated/stock.js:2426
+#: InvenTree/models.py:570 InvenTree/models.py:571
+#: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2431
msgid "Path"
msgstr ""
-#: InvenTree/models.py:670
+#: InvenTree/models.py:672
+msgid "Barcode Data"
+msgstr ""
+
+#: InvenTree/models.py:673
+msgid "Third party barcode data"
+msgstr ""
+
+#: InvenTree/models.py:678 order/serializers.py:486
+msgid "Barcode Hash"
+msgstr ""
+
+#: InvenTree/models.py:679
+msgid "Unique hash of barcode data"
+msgstr ""
+
+#: InvenTree/models.py:724
+msgid "Existing barcode found"
+msgstr ""
+
+#: InvenTree/models.py:777
msgid "Server Error"
msgstr ""
-#: InvenTree/models.py:671
+#: InvenTree/models.py:778
msgid "An error has been logged by the server."
msgstr ""
-#: InvenTree/serializers.py:55 part/models.py:2753
+#: InvenTree/serializers.py:55 part/models.py:2741
msgid "Must be a valid number"
msgstr ""
@@ -411,94 +431,98 @@ msgid "Czech"
msgstr ""
#: InvenTree/settings.py:608
-msgid "German"
+msgid "Danish"
msgstr ""
#: InvenTree/settings.py:609
-msgid "Greek"
+msgid "German"
msgstr ""
#: InvenTree/settings.py:610
-msgid "English"
+msgid "Greek"
msgstr ""
#: InvenTree/settings.py:611
-msgid "Spanish"
+msgid "English"
msgstr ""
#: InvenTree/settings.py:612
-msgid "Spanish (Mexican)"
+msgid "Spanish"
msgstr ""
#: InvenTree/settings.py:613
-msgid "Farsi / Persian"
+msgid "Spanish (Mexican)"
msgstr ""
#: InvenTree/settings.py:614
-msgid "French"
+msgid "Farsi / Persian"
msgstr ""
#: InvenTree/settings.py:615
-msgid "Hebrew"
+msgid "French"
msgstr ""
#: InvenTree/settings.py:616
-msgid "Hungarian"
+msgid "Hebrew"
msgstr ""
#: InvenTree/settings.py:617
-msgid "Italian"
+msgid "Hungarian"
msgstr ""
#: InvenTree/settings.py:618
-msgid "Japanese"
+msgid "Italian"
msgstr ""
#: InvenTree/settings.py:619
-msgid "Korean"
+msgid "Japanese"
msgstr ""
#: InvenTree/settings.py:620
-msgid "Dutch"
+msgid "Korean"
msgstr ""
#: InvenTree/settings.py:621
-msgid "Norwegian"
+msgid "Dutch"
msgstr ""
#: InvenTree/settings.py:622
-msgid "Polish"
+msgid "Norwegian"
msgstr ""
#: InvenTree/settings.py:623
-msgid "Portuguese"
+msgid "Polish"
msgstr ""
#: InvenTree/settings.py:624
-msgid "Portuguese (Brazilian)"
+msgid "Portuguese"
msgstr ""
#: InvenTree/settings.py:625
-msgid "Russian"
+msgid "Portuguese (Brazilian)"
msgstr ""
#: InvenTree/settings.py:626
-msgid "Swedish"
+msgid "Russian"
msgstr ""
#: InvenTree/settings.py:627
-msgid "Thai"
+msgid "Swedish"
msgstr ""
#: InvenTree/settings.py:628
-msgid "Turkish"
+msgid "Thai"
msgstr ""
#: InvenTree/settings.py:629
-msgid "Vietnamese"
+msgid "Turkish"
msgstr ""
#: InvenTree/settings.py:630
+msgid "Vietnamese"
+msgstr ""
+
+#: InvenTree/settings.py:631
msgid "Chinese"
msgstr ""
@@ -629,7 +653,7 @@ msgstr ""
msgid "Split child item"
msgstr ""
-#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2080
+#: InvenTree/status_codes.py:281 templates/js/translated/stock.js:2082
msgid "Merged stock items"
msgstr ""
@@ -732,7 +756,7 @@ msgstr ""
#: report/templates/report/inventree_build_order_base.html:105
#: templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
-#: templates/js/translated/build.js:764
+#: templates/js/translated/build.js:780
msgid "Build Order"
msgstr ""
@@ -746,42 +770,42 @@ msgstr ""
msgid "Build Orders"
msgstr ""
-#: build/models.py:165
+#: build/models.py:154
msgid "Build Order Reference"
msgstr ""
-#: build/models.py:166 order/models.py:240 order/models.py:627
-#: order/models.py:908 part/models.py:2671
+#: build/models.py:155 order/models.py:240 order/models.py:627
+#: order/models.py:908 part/models.py:2659
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:853
-#: templates/js/translated/build.js:1813 templates/js/translated/order.js:2251
+#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251
#: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823
#: templates/js/translated/order.js:4331
msgid "Reference"
msgstr ""
-#: build/models.py:177
+#: build/models.py:166
msgid "Brief description of the build"
msgstr ""
-#: build/models.py:185 build/templates/build/build_base.html:172
+#: build/models.py:174 build/templates/build/build_base.html:172
#: build/templates/build/detail.html:87
msgid "Parent Build"
msgstr ""
-#: build/models.py:186
+#: build/models.py:175
msgid "BuildOrder to which this build is allocated"
msgstr ""
-#: build/models.py:191 build/templates/build/build_base.html:80
+#: build/models.py:180 build/templates/build/build_base.html:80
#: build/templates/build/detail.html:29 company/models.py:679
#: order/models.py:1005 order/models.py:1116 order/models.py:1117
-#: part/models.py:343 part/models.py:2193 part/models.py:2208
-#: part/models.py:2227 part/models.py:2245 part/models.py:2344
-#: part/models.py:2471 part/models.py:2561 part/models.py:2646
-#: part/models.py:2922 part/serializers.py:814
+#: part/models.py:343 part/models.py:2181 part/models.py:2196
+#: part/models.py:2215 part/models.py:2233 part/models.py:2332
+#: part/models.py:2459 part/models.py:2549 part/models.py:2634
+#: part/models.py:2910 part/serializers.py:827
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/upload_bom.html:52
@@ -793,10 +817,10 @@ msgstr ""
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:16
#: templates/email/overdue_build_order.html:16
-#: templates/js/translated/barcode.js:435 templates/js/translated/bom.js:552
+#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:552
#: templates/js/translated/bom.js:689 templates/js/translated/bom.js:800
-#: templates/js/translated/build.js:1189 templates/js/translated/build.js:1682
-#: templates/js/translated/build.js:2126 templates/js/translated/build.js:2517
+#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698
+#: templates/js/translated/build.js:2142 templates/js/translated/build.js:2533
#: templates/js/translated/company.js:301
#: templates/js/translated/company.js:531
#: templates/js/translated/company.js:643
@@ -805,213 +829,213 @@ msgstr ""
#: templates/js/translated/order.js:2205 templates/js/translated/order.js:3185
#: templates/js/translated/order.js:3581 templates/js/translated/order.js:3807
#: templates/js/translated/part.js:1172 templates/js/translated/part.js:1244
-#: templates/js/translated/part.js:1441 templates/js/translated/stock.js:586
+#: templates/js/translated/part.js:1440 templates/js/translated/stock.js:586
#: templates/js/translated/stock.js:751 templates/js/translated/stock.js:958
-#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2500
-#: templates/js/translated/stock.js:2695 templates/js/translated/stock.js:2829
+#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2508
+#: templates/js/translated/stock.js:2703 templates/js/translated/stock.js:2837
msgid "Part"
msgstr ""
-#: build/models.py:199
+#: build/models.py:188
msgid "Select part to build"
msgstr ""
-#: build/models.py:204
+#: build/models.py:193
msgid "Sales Order Reference"
msgstr ""
-#: build/models.py:208
+#: build/models.py:197
msgid "SalesOrder to which this build is allocated"
msgstr ""
-#: build/models.py:213 build/serializers.py:800
-#: templates/js/translated/build.js:2114 templates/js/translated/order.js:3173
+#: build/models.py:202 build/serializers.py:815
+#: templates/js/translated/build.js:2130 templates/js/translated/order.js:3173
msgid "Source Location"
msgstr ""
-#: build/models.py:217
+#: build/models.py:206
msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
msgstr ""
-#: build/models.py:222
+#: build/models.py:211
msgid "Destination Location"
msgstr ""
-#: build/models.py:226
+#: build/models.py:215
msgid "Select location where the completed items will be stored"
msgstr ""
-#: build/models.py:230
+#: build/models.py:219
msgid "Build Quantity"
msgstr ""
-#: build/models.py:233
+#: build/models.py:222
msgid "Number of stock items to build"
msgstr ""
-#: build/models.py:237
+#: build/models.py:226
msgid "Completed items"
msgstr ""
-#: build/models.py:239
+#: build/models.py:228
msgid "Number of stock items which have been completed"
msgstr ""
-#: build/models.py:243
+#: build/models.py:232
msgid "Build Status"
msgstr ""
-#: build/models.py:247
+#: build/models.py:236
msgid "Build status code"
msgstr ""
-#: build/models.py:251 build/serializers.py:225 order/serializers.py:464
-#: stock/models.py:662 templates/js/translated/order.js:1496
+#: build/models.py:240 build/serializers.py:225 order/serializers.py:464
+#: stock/models.py:609 templates/js/translated/order.js:1496
msgid "Batch Code"
msgstr ""
-#: build/models.py:255 build/serializers.py:226
+#: build/models.py:244 build/serializers.py:226
msgid "Batch code for this build output"
msgstr ""
-#: build/models.py:258 order/models.py:86 part/models.py:938
-#: part/templates/part/part_base.html:305 templates/js/translated/order.js:2844
+#: build/models.py:247 order/models.py:86 part/models.py:938
+#: part/templates/part/part_base.html:318 templates/js/translated/order.js:2844
msgid "Creation Date"
msgstr ""
-#: build/models.py:262 order/models.py:652
+#: build/models.py:251 order/models.py:652
msgid "Target completion date"
msgstr ""
-#: build/models.py:263
+#: build/models.py:252
msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
-#: build/models.py:266 order/models.py:286
-#: templates/js/translated/build.js:2594
+#: build/models.py:255 order/models.py:286
+#: templates/js/translated/build.js:2610
msgid "Completion Date"
msgstr ""
-#: build/models.py:272
+#: build/models.py:261
msgid "completed by"
msgstr ""
-#: build/models.py:280 templates/js/translated/build.js:2562
+#: build/models.py:269 templates/js/translated/build.js:2578
msgid "Issued by"
msgstr ""
-#: build/models.py:281
+#: build/models.py:270
msgid "User who issued this build order"
msgstr ""
-#: build/models.py:289 build/templates/build/build_base.html:193
+#: build/models.py:278 build/templates/build/build_base.html:193
#: build/templates/build/detail.html:115 order/models.py:100
#: order/templates/order/order_base.html:185
#: order/templates/order/sales_order_base.html:183 part/models.py:942
#: report/templates/report/inventree_build_order_base.html:158
-#: templates/js/translated/build.js:2574 templates/js/translated/order.js:2022
+#: templates/js/translated/build.js:2590 templates/js/translated/order.js:2022
msgid "Responsible"
msgstr ""
-#: build/models.py:290
+#: build/models.py:279
msgid "User responsible for this build order"
msgstr ""
-#: build/models.py:295 build/templates/build/detail.html:101
+#: build/models.py:284 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
-#: company/templates/company/supplier_part.html:165
-#: part/templates/part/part_base.html:346 stock/models.py:656
+#: company/templates/company/supplier_part.html:188
+#: part/templates/part/part_base.html:359 stock/models.py:603
#: stock/templates/stock/item_base.html:203
msgid "External Link"
msgstr ""
-#: build/models.py:300
+#: build/models.py:289
msgid "Extra build notes"
msgstr ""
-#: build/models.py:538
+#: build/models.py:527
#, python-brace-format
msgid "Build order {build} has been completed"
msgstr ""
-#: build/models.py:544
+#: build/models.py:533
msgid "A build order has been completed"
msgstr ""
-#: build/models.py:723
+#: build/models.py:712
msgid "No build output specified"
msgstr ""
-#: build/models.py:726
+#: build/models.py:715
msgid "Build output is already completed"
msgstr ""
-#: build/models.py:729
+#: build/models.py:718
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1169
+#: build/models.py:1158
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1178
+#: build/models.py:1167
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:1188 order/models.py:1383
+#: build/models.py:1177 order/models.py:1383
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:1194 order/models.py:1386
+#: build/models.py:1183 order/models.py:1386
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: build/models.py:1200
+#: build/models.py:1189
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1257
+#: build/models.py:1246
msgid "Selected stock item not found in BOM"
msgstr ""
-#: build/models.py:1326 stock/templates/stock/item_base.html:175
-#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2496
+#: build/models.py:1315 stock/templates/stock/item_base.html:175
+#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2512
#: templates/navbar.html:38
msgid "Build"
msgstr ""
-#: build/models.py:1327
+#: build/models.py:1316
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1343 build/serializers.py:645 order/serializers.py:1035
+#: build/models.py:1332 build/serializers.py:660 order/serializers.py:1035
#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754
#: stock/serializers.py:880 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:197
-#: templates/js/translated/build.js:774 templates/js/translated/build.js:779
-#: templates/js/translated/build.js:2128 templates/js/translated/build.js:2679
+#: templates/js/translated/build.js:790 templates/js/translated/build.js:795
+#: templates/js/translated/build.js:2144 templates/js/translated/build.js:2695
#: templates/js/translated/order.js:107 templates/js/translated/order.js:3186
#: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493
#: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680
#: templates/js/translated/stock.js:587 templates/js/translated/stock.js:752
-#: templates/js/translated/stock.js:2573
+#: templates/js/translated/stock.js:2581
msgid "Stock Item"
msgstr ""
-#: build/models.py:1344
+#: build/models.py:1333
msgid "Source stock item"
msgstr ""
-#: build/models.py:1356 build/serializers.py:193
+#: build/models.py:1345 build/serializers.py:193
#: build/templates/build/build_base.html:85
#: build/templates/build/detail.html:34 common/models.py:1701
-#: company/templates/company/supplier_part.html:291 order/models.py:901
+#: company/templates/company/supplier_part.html:341 order/models.py:901
#: order/models.py:1427 order/serializers.py:1209
#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40
-#: part/models.py:2662 part/templates/part/detail.html:951
-#: part/templates/part/detail.html:1037
+#: part/models.py:2650 part/templates/part/detail.html:950
+#: part/templates/part/detail.html:1036
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
#: report/templates/report/inventree_build_order_base.html:113
@@ -1022,39 +1046,39 @@ msgstr ""
#: stock/serializers.py:291 stock/templates/stock/item_base.html:290
#: stock/templates/stock/item_base.html:298
#: templates/email/build_order_completed.html:18
-#: templates/js/translated/barcode.js:437 templates/js/translated/bom.js:691
-#: templates/js/translated/bom.js:861 templates/js/translated/build.js:458
-#: templates/js/translated/build.js:610 templates/js/translated/build.js:801
-#: templates/js/translated/build.js:1211 templates/js/translated/build.js:1708
-#: templates/js/translated/build.js:2129
+#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:691
+#: templates/js/translated/bom.js:861 templates/js/translated/build.js:474
+#: templates/js/translated/build.js:626 templates/js/translated/build.js:817
+#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724
+#: templates/js/translated/build.js:2145
#: templates/js/translated/model_renderers.js:120
#: templates/js/translated/order.js:123 templates/js/translated/order.js:1137
#: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490
#: templates/js/translated/order.js:3187 templates/js/translated/order.js:3507
#: templates/js/translated/order.js:3594 templates/js/translated/order.js:3686
#: templates/js/translated/order.js:3829 templates/js/translated/order.js:4337
-#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2205
-#: templates/js/translated/part.js:2674 templates/js/translated/part.js:2715
-#: templates/js/translated/part.js:2793 templates/js/translated/stock.js:458
+#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2216
+#: templates/js/translated/part.js:2685 templates/js/translated/part.js:2726
+#: templates/js/translated/part.js:2804 templates/js/translated/stock.js:458
#: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782
-#: templates/js/translated/stock.js:2622 templates/js/translated/stock.js:2707
+#: templates/js/translated/stock.js:2630 templates/js/translated/stock.js:2715
msgid "Quantity"
msgstr ""
-#: build/models.py:1357
+#: build/models.py:1346
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:1365
+#: build/models.py:1354
msgid "Install into"
msgstr ""
-#: build/models.py:1366
+#: build/models.py:1355
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:138 build/serializers.py:674
-#: templates/js/translated/build.js:1199
+#: build/serializers.py:138 build/serializers.py:689
+#: templates/js/translated/build.js:1215
msgid "Build Output"
msgstr ""
@@ -1078,9 +1102,9 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:208 build/serializers.py:665 order/models.py:318
-#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:545
-#: part/serializers.py:977 stock/models.py:484 stock/models.py:1251
+#: build/serializers.py:208 build/serializers.py:680 order/models.py:318
+#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558
+#: part/serializers.py:990 stock/models.py:463 stock/models.py:1198
#: stock/serializers.py:300
msgid "Quantity must be greater than zero"
msgstr ""
@@ -1123,14 +1147,14 @@ msgstr ""
#: stock/serializers.py:320 stock/serializers.py:451 stock/serializers.py:532
#: stock/serializers.py:915 stock/serializers.py:1148
#: stock/templates/stock/item_base.html:388
-#: templates/js/translated/barcode.js:436
-#: templates/js/translated/barcode.js:618 templates/js/translated/build.js:786
-#: templates/js/translated/build.js:1720 templates/js/translated/order.js:1534
+#: templates/js/translated/barcode.js:431
+#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:802
+#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534
#: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605
#: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694
#: templates/js/translated/part.js:181 templates/js/translated/stock.js:588
#: templates/js/translated/stock.js:753 templates/js/translated/stock.js:960
-#: templates/js/translated/stock.js:1850 templates/js/translated/stock.js:2514
+#: templates/js/translated/stock.js:1852 templates/js/translated/stock.js:2522
msgid "Location"
msgstr ""
@@ -1141,10 +1165,10 @@ msgstr ""
#: build/serializers.py:373 build/templates/build/build_base.html:145
#: build/templates/build/detail.html:62 order/models.py:646
#: order/serializers.py:482 stock/templates/stock/item_base.html:421
-#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2546
+#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2562
#: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992
-#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1825
-#: templates/js/translated/stock.js:2591 templates/js/translated/stock.js:2723
+#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1827
+#: templates/js/translated/stock.js:2599 templates/js/translated/stock.js:2731
msgid "Status"
msgstr ""
@@ -1180,113 +1204,113 @@ msgstr ""
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:494
+#: build/serializers.py:509
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:496
+#: build/serializers.py:511
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:506
+#: build/serializers.py:521
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:511
+#: build/serializers.py:526
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:512
+#: build/serializers.py:527
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:522 templates/js/translated/build.js:227
+#: build/serializers.py:537 templates/js/translated/build.js:258
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:527 order/serializers.py:208 order/serializers.py:1103
+#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:528
+#: build/serializers.py:543
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:538 templates/js/translated/build.js:231
+#: build/serializers.py:553 templates/js/translated/build.js:262
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:547
+#: build/serializers.py:562 templates/js/translated/build.js:246
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:577 build/serializers.py:622 part/models.py:2780
-#: part/models.py:2914
+#: build/serializers.py:592 build/serializers.py:637 part/models.py:2768
+#: part/models.py:2902
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:587
+#: build/serializers.py:602
msgid "Build output"
msgstr ""
-#: build/serializers.py:595
+#: build/serializers.py:610
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:636
+#: build/serializers.py:651
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:651 stock/serializers.py:767
+#: build/serializers.py:666 stock/serializers.py:767
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:709 order/serializers.py:1093
+#: build/serializers.py:724 order/serializers.py:1093
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:715
+#: build/serializers.py:730
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:722
+#: build/serializers.py:737
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:727
+#: build/serializers.py:742
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:750 order/serializers.py:1373
+#: build/serializers.py:765 order/serializers.py:1373
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:801
+#: build/serializers.py:816
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:809
+#: build/serializers.py:824
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:810
+#: build/serializers.py:825
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:815
+#: build/serializers.py:830
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:816
+#: build/serializers.py:831
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:821
+#: build/serializers.py:836
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:822
+#: build/serializers.py:837
msgid "Allow allocation of substitute parts"
msgstr ""
@@ -1377,7 +1401,7 @@ msgstr ""
#: order/templates/order/order_base.html:171
#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:125
-#: templates/js/translated/build.js:2586 templates/js/translated/order.js:2009
+#: templates/js/translated/build.js:2602 templates/js/translated/order.js:2009
#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852
#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051
msgid "Target Date"
@@ -1424,7 +1448,7 @@ msgstr ""
msgid "Issued By"
msgstr ""
-#: build/templates/build/build_base.html:256
+#: build/templates/build/build_base.html:252
msgid "Delete Build Order"
msgstr ""
@@ -1455,10 +1479,10 @@ msgstr ""
#: build/templates/build/detail.html:80
#: stock/templates/stock/item_base.html:168
-#: templates/js/translated/build.js:1215
+#: templates/js/translated/build.js:1231
#: templates/js/translated/model_renderers.js:124
-#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1839
-#: templates/js/translated/stock.js:2730
+#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1841
+#: templates/js/translated/stock.js:2738
#: templates/js/translated/table_filters.js:159
#: templates/js/translated/table_filters.js:250
msgid "Batch"
@@ -1467,7 +1491,7 @@ msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:158
#: order/templates/order/sales_order_base.html:158
-#: templates/js/translated/build.js:2554
+#: templates/js/translated/build.js:2570
msgid "Created"
msgstr ""
@@ -1487,7 +1511,7 @@ msgstr ""
msgid "Allocate Stock to Build"
msgstr ""
-#: build/templates/build/detail.html:176 templates/js/translated/build.js:1942
+#: build/templates/build/detail.html:176 templates/js/translated/build.js:1958
msgid "Unallocate stock"
msgstr ""
@@ -1571,12 +1595,12 @@ msgid "Delete outputs"
msgstr ""
#: build/templates/build/detail.html:267
-#: stock/templates/stock/location.html:202 templates/stock_table.html:27
+#: stock/templates/stock/location.html:214 templates/stock_table.html:27
msgid "Printing Actions"
msgstr ""
#: build/templates/build/detail.html:271 build/templates/build/detail.html:272
-#: stock/templates/stock/location.html:206 templates/stock_table.html:31
+#: stock/templates/stock/location.html:218 templates/stock_table.html:31
msgid "Print labels"
msgstr ""
@@ -1853,7 +1877,7 @@ msgstr ""
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:951 part/models.py:2473 report/models.py:158
+#: common/models.py:951 part/models.py:2461 report/models.py:158
#: templates/js/translated/table_filters.js:38
#: templates/js/translated/table_filters.js:484
msgid "Template"
@@ -1911,7 +1935,7 @@ msgid "Parts are trackable by default"
msgstr ""
#: common/models.py:993 part/models.py:926
-#: part/templates/part/part_base.html:151
+#: part/templates/part/part_base.html:156
#: templates/js/translated/table_filters.js:42
#: templates/js/translated/table_filters.js:492
msgid "Virtual"
@@ -2598,8 +2622,8 @@ msgid "Price break quantity"
msgstr ""
#: common/models.py:1709 company/serializers.py:372
-#: company/templates/company/supplier_part.html:296 order/models.py:942
-#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2210
+#: company/templates/company/supplier_part.html:346 order/models.py:942
+#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221
msgid "Price"
msgstr ""
@@ -2836,7 +2860,7 @@ msgstr ""
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:248 company/models.py:482 stock/models.py:598
+#: company/models.py:248 company/models.py:482 stock/models.py:545
#: stock/serializers.py:85 stock/templates/stock/item_base.html:143
#: templates/js/translated/bom.js:542
msgid "Base Part"
@@ -2848,7 +2872,7 @@ msgstr ""
#: company/models.py:263 company/templates/company/company_base.html:76
#: company/templates/company/manufacturer_part.html:90
-#: company/templates/company/supplier_part.html:129
+#: company/templates/company/supplier_part.html:152
#: stock/templates/stock/item_base.html:210
#: templates/js/translated/company.js:432
#: templates/js/translated/company.js:533
@@ -2863,7 +2887,7 @@ msgid "Select manufacturer"
msgstr ""
#: company/models.py:270 company/templates/company/manufacturer_part.html:101
-#: company/templates/company/supplier_part.html:137
+#: company/templates/company/supplier_part.html:160
#: templates/js/translated/company.js:304
#: templates/js/translated/company.js:532
#: templates/js/translated/company.js:684
@@ -2897,7 +2921,7 @@ msgstr ""
#: company/models.py:365
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2095 templates/js/translated/company.js:581
+#: stock/models.py:2042 templates/js/translated/company.js:581
#: templates/js/translated/company.js:799 templates/js/translated/part.js:847
#: templates/js/translated/stock.js:1360
msgid "Value"
@@ -2907,8 +2931,8 @@ msgstr ""
msgid "Parameter value"
msgstr ""
-#: company/models.py:372 part/models.py:888 part/models.py:2433
-#: part/templates/part/part_base.html:280
+#: company/models.py:372 part/models.py:888 part/models.py:2421
+#: part/templates/part/part_base.html:286
#: templates/InvenTree/settings/settings.html:352
#: templates/js/translated/company.js:805 templates/js/translated/part.js:853
msgid "Units"
@@ -2923,7 +2947,7 @@ msgid "Linked manufacturer part must reference the same base part"
msgstr ""
#: company/models.py:492 company/templates/company/company_base.html:81
-#: company/templates/company/supplier_part.html:113 order/models.py:258
+#: company/templates/company/supplier_part.html:136 order/models.py:258
#: order/templates/order/order_base.html:121 part/bom.py:237 part/bom.py:265
#: stock/templates/stock/item_base.html:227
#: templates/email/overdue_purchase_order.html:16
@@ -2939,7 +2963,7 @@ msgstr ""
msgid "Select supplier"
msgstr ""
-#: company/models.py:498 company/templates/company/supplier_part.html:123
+#: company/models.py:498 company/templates/company/supplier_part.html:146
#: part/bom.py:238 part/bom.py:266 templates/js/translated/company.js:302
#: templates/js/translated/order.js:2226 templates/js/translated/part.js:228
#: templates/js/translated/part.js:1011
@@ -2962,24 +2986,24 @@ msgstr ""
msgid "Supplier part description"
msgstr ""
-#: company/models.py:523 company/templates/company/supplier_part.html:158
-#: part/models.py:2674 part/templates/part/upload_bom.html:59
+#: company/models.py:523 company/templates/company/supplier_part.html:181
+#: part/models.py:2662 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399
msgid "Note"
msgstr ""
-#: company/models.py:527 part/models.py:1781
+#: company/models.py:527 part/models.py:1769
msgid "base cost"
msgstr ""
-#: company/models.py:527 part/models.py:1781
+#: company/models.py:527 part/models.py:1769
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
-#: company/models.py:529 company/templates/company/supplier_part.html:144
-#: stock/models.py:624 stock/templates/stock/item_base.html:243
-#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1972
+#: company/models.py:529 company/templates/company/supplier_part.html:167
+#: stock/models.py:571 stock/templates/stock/item_base.html:243
+#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1974
msgid "Packaging"
msgstr ""
@@ -2988,7 +3012,7 @@ msgid "Part packaging"
msgstr ""
#: company/models.py:532 company/serializers.py:242
-#: company/templates/company/supplier_part.html:151
+#: company/templates/company/supplier_part.html:174
#: templates/js/translated/company.js:996 templates/js/translated/order.js:820
#: templates/js/translated/order.js:1215 templates/js/translated/order.js:1470
#: templates/js/translated/order.js:2270 templates/js/translated/order.js:2287
@@ -3000,7 +3024,7 @@ msgstr ""
msgid "Unit quantity supplied in a single pack"
msgstr ""
-#: company/models.py:539 part/models.py:1783
+#: company/models.py:539 part/models.py:1771
msgid "multiple"
msgstr ""
@@ -3008,11 +3032,11 @@ msgstr ""
msgid "Order multiple"
msgstr ""
-#: company/models.py:547 company/templates/company/supplier_part.html:99
+#: company/models.py:547 company/templates/company/supplier_part.html:115
#: templates/email/build_order_required_stock.html:19
#: templates/email/low_stock_notification.html:18
-#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1823
-#: templates/js/translated/build.js:2686 templates/js/translated/part.js:598
+#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1839
+#: templates/js/translated/build.js:2702 templates/js/translated/part.js:598
#: templates/js/translated/part.js:601
#: templates/js/translated/table_filters.js:186
msgid "Available"
@@ -3086,12 +3110,12 @@ msgid "Download image from URL"
msgstr ""
#: company/templates/company/company_base.html:86 order/models.py:641
-#: order/templates/order/sales_order_base.html:116 stock/models.py:643
-#: stock/models.py:644 stock/serializers.py:809
+#: order/templates/order/sales_order_base.html:116 stock/models.py:590
+#: stock/models.py:591 stock/serializers.py:809
#: stock/templates/stock/item_base.html:399
#: templates/email/overdue_sales_order.html:16
#: templates/js/translated/company.js:428 templates/js/translated/order.js:2813
-#: templates/js/translated/stock.js:2555
+#: templates/js/translated/stock.js:2563
#: templates/js/translated/table_filters.js:427
msgid "Customer"
msgstr ""
@@ -3105,12 +3129,12 @@ msgid "Phone"
msgstr ""
#: company/templates/company/company_base.html:208
-#: part/templates/part/part_base.html:465
+#: part/templates/part/part_base.html:497
msgid "Upload Image"
msgstr ""
#: company/templates/company/company_base.html:223
-#: part/templates/part/part_base.html:520
+#: part/templates/part/part_base.html:552
msgid "Download Image"
msgstr ""
@@ -3211,7 +3235,7 @@ msgid "New Sales Order"
msgstr ""
#: company/templates/company/detail.html:168
-#: templates/js/translated/build.js:1693
+#: templates/js/translated/build.js:1709
msgid "Assigned Stock"
msgstr ""
@@ -3226,8 +3250,8 @@ msgid "Manufacturers"
msgstr ""
#: company/templates/company/manufacturer_part.html:35
-#: company/templates/company/supplier_part.html:198
-#: part/templates/part/detail.html:87 part/templates/part/part_base.html:80
+#: company/templates/company/supplier_part.html:221
+#: part/templates/part/detail.html:87 part/templates/part/part_base.html:85
msgid "Order part"
msgstr ""
@@ -3242,7 +3266,7 @@ msgid "Delete manufacturer part"
msgstr ""
#: company/templates/company/manufacturer_part.html:65
-#: company/templates/company/supplier_part.html:82
+#: company/templates/company/supplier_part.html:98
msgid "Internal Part"
msgstr ""
@@ -3265,7 +3289,7 @@ msgstr ""
#: company/templates/company/manufacturer_part.html:136
#: company/templates/company/manufacturer_part.html:183
#: part/templates/part/detail.html:371 part/templates/part/detail.html:401
-#: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:34
+#: templates/js/translated/forms.js:458 templates/js/translated/helpers.js:36
#: users/models.py:222
msgid "Delete"
msgstr ""
@@ -3289,7 +3313,7 @@ msgid "Delete parameters"
msgstr ""
#: company/templates/company/manufacturer_part.html:245
-#: part/templates/part/detail.html:840
+#: part/templates/part/detail.html:839
msgid "Add Parameter"
msgstr ""
@@ -3310,112 +3334,152 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:607
+#: company/templates/company/supplier_part.html:24 stock/models.py:554
#: stock/templates/stock/item_base.html:236
#: templates/js/translated/company.js:945 templates/js/translated/order.js:1135
-#: templates/js/translated/stock.js:1929
+#: templates/js/translated/stock.js:1931
msgid "Supplier Part"
msgstr ""
-#: company/templates/company/supplier_part.html:35
-msgid "Supplier part actions"
+#: company/templates/company/supplier_part.html:36
+#: part/templates/part/part_base.html:43
+#: stock/templates/stock/item_base.html:41
+#: stock/templates/stock/location.html:48
+msgid "Barcode actions"
msgstr ""
#: company/templates/company/supplier_part.html:40
-#: company/templates/company/supplier_part.html:41
-#: company/templates/company/supplier_part.html:199
+#: part/templates/part/part_base.html:46
+#: stock/templates/stock/item_base.html:45
+#: stock/templates/stock/location.html:50 templates/qr_button.html:1
+msgid "Show QR Code"
+msgstr ""
+
+#: company/templates/company/supplier_part.html:42
+#: stock/templates/stock/item_base.html:48
+#: stock/templates/stock/location.html:52
+#: templates/js/translated/barcode.js:381
+#: templates/js/translated/barcode.js:386
+msgid "Unlink Barcode"
+msgstr ""
+
+#: company/templates/company/supplier_part.html:44
+#: part/templates/part/part_base.html:51
+#: stock/templates/stock/item_base.html:50
+#: stock/templates/stock/location.html:54
+msgid "Link Barcode"
+msgstr ""
+
+#: company/templates/company/supplier_part.html:51
+msgid "Supplier part actions"
+msgstr ""
+
+#: company/templates/company/supplier_part.html:56
+#: company/templates/company/supplier_part.html:57
+#: company/templates/company/supplier_part.html:222
#: part/templates/part/detail.html:88
msgid "Order Part"
msgstr ""
-#: company/templates/company/supplier_part.html:45
-#: company/templates/company/supplier_part.html:46
+#: company/templates/company/supplier_part.html:61
+#: company/templates/company/supplier_part.html:62
msgid "Update Availability"
msgstr ""
-#: company/templates/company/supplier_part.html:48
-#: company/templates/company/supplier_part.html:49
+#: company/templates/company/supplier_part.html:64
+#: company/templates/company/supplier_part.html:65
#: templates/js/translated/company.js:247
msgid "Edit Supplier Part"
msgstr ""
-#: company/templates/company/supplier_part.html:53
-#: company/templates/company/supplier_part.html:54
+#: company/templates/company/supplier_part.html:69
+#: company/templates/company/supplier_part.html:70
#: templates/js/translated/company.js:222
msgid "Duplicate Supplier Part"
msgstr ""
-#: company/templates/company/supplier_part.html:58
+#: company/templates/company/supplier_part.html:74
msgid "Delete Supplier Part"
msgstr ""
-#: company/templates/company/supplier_part.html:59
+#: company/templates/company/supplier_part.html:75
msgid "Delete Supplier Part"
msgstr ""
-#: company/templates/company/supplier_part.html:117
+#: company/templates/company/supplier_part.html:122
+#: part/templates/part/part_base.html:307
+#: stock/templates/stock/item_base.html:161
+#: stock/templates/stock/location.html:146
+msgid "Barcode Identifier"
+msgstr ""
+
+#: company/templates/company/supplier_part.html:140
msgid "No supplier information available"
msgstr ""
-#: company/templates/company/supplier_part.html:177
+#: company/templates/company/supplier_part.html:200
#: company/templates/company/supplier_part_navbar.html:12
msgid "Supplier Part Stock"
msgstr ""
-#: company/templates/company/supplier_part.html:180
-#: part/templates/part/detail.html:24 stock/templates/stock/location.html:181
+#: company/templates/company/supplier_part.html:203
+#: part/templates/part/detail.html:24 stock/templates/stock/location.html:193
msgid "Create new stock item"
msgstr ""
-#: company/templates/company/supplier_part.html:181
-#: part/templates/part/detail.html:25 stock/templates/stock/location.html:182
+#: company/templates/company/supplier_part.html:204
+#: part/templates/part/detail.html:25 stock/templates/stock/location.html:194
#: templates/js/translated/stock.js:435
msgid "New Stock Item"
msgstr ""
-#: company/templates/company/supplier_part.html:194
+#: company/templates/company/supplier_part.html:217
#: company/templates/company/supplier_part_navbar.html:19
msgid "Supplier Part Orders"
msgstr ""
-#: company/templates/company/supplier_part.html:219
+#: company/templates/company/supplier_part.html:242
#: part/templates/part/prices.html:10
msgid "Pricing Information"
msgstr ""
-#: company/templates/company/supplier_part.html:224
-#: company/templates/company/supplier_part.html:338
-#: part/templates/part/prices.html:276 templates/js/translated/part.js:2282
+#: company/templates/company/supplier_part.html:247
+#: company/templates/company/supplier_part.html:388
+#: part/templates/part/prices.html:276 templates/js/translated/part.js:2293
msgid "Add Price Break"
msgstr ""
-#: company/templates/company/supplier_part.html:250
+#: company/templates/company/supplier_part.html:282
+msgid "Link Barcode to Supplier Part"
+msgstr ""
+
+#: company/templates/company/supplier_part.html:300
msgid "No price break information found"
msgstr ""
-#: company/templates/company/supplier_part.html:264
-#: templates/js/translated/part.js:2292
+#: company/templates/company/supplier_part.html:314
+#: templates/js/translated/part.js:2303
msgid "Delete Price Break"
msgstr ""
-#: company/templates/company/supplier_part.html:278
-#: templates/js/translated/part.js:2306
+#: company/templates/company/supplier_part.html:328
+#: templates/js/translated/part.js:2317
msgid "Edit Price Break"
msgstr ""
-#: company/templates/company/supplier_part.html:303
+#: company/templates/company/supplier_part.html:353
msgid "Edit price break"
msgstr ""
-#: company/templates/company/supplier_part.html:304
+#: company/templates/company/supplier_part.html:354
msgid "Delete price break"
msgstr ""
-#: company/templates/company/supplier_part.html:313
+#: company/templates/company/supplier_part.html:363
msgid "Last updated"
msgstr ""
-#: company/templates/company/supplier_part.html:394
+#: company/templates/company/supplier_part.html:444
msgid "Update Part Availability"
msgstr ""
@@ -3425,9 +3489,9 @@ msgstr ""
#: stock/templates/stock/stock_app_base.html:10
#: templates/InvenTree/search.html:153
#: templates/InvenTree/settings/sidebar.html:45
-#: templates/js/translated/part.js:749 templates/js/translated/part.js:1334
-#: templates/js/translated/part.js:1495 templates/js/translated/stock.js:959
-#: templates/js/translated/stock.js:1754 templates/navbar.html:31
+#: templates/js/translated/part.js:749 templates/js/translated/part.js:1333
+#: templates/js/translated/part.js:1499 templates/js/translated/stock.js:959
+#: templates/js/translated/stock.js:1756 templates/navbar.html:31
msgid "Stock"
msgstr ""
@@ -3448,12 +3512,12 @@ msgstr ""
#: company/templates/company/supplier_part_sidebar.html:5
#: part/templates/part/category.html:203
#: part/templates/part/category_sidebar.html:17
-#: stock/templates/stock/location.html:152
-#: stock/templates/stock/location.html:166
+#: stock/templates/stock/location.html:164
#: stock/templates/stock/location.html:178
+#: stock/templates/stock/location.html:190
#: stock/templates/stock/location_sidebar.html:7
#: templates/InvenTree/search.html:155 templates/js/translated/search.js:225
-#: templates/js/translated/stock.js:2432 users/models.py:40
+#: templates/js/translated/stock.js:2440 users/models.py:40
msgid "Stock Items"
msgstr ""
@@ -3482,6 +3546,10 @@ msgstr ""
msgid "New Company"
msgstr ""
+#: company/views.py:120 stock/views.py:125
+msgid "Stock Item QR Code"
+msgstr ""
+
#: label/models.py:102
msgid "Label name"
msgstr ""
@@ -3534,16 +3602,16 @@ msgstr ""
msgid "Query filters (comma-separated list of key=value pairs),"
msgstr ""
-#: label/models.py:234 label/models.py:274 label/models.py:302
+#: label/models.py:234 label/models.py:275 label/models.py:303
#: report/models.py:280 report/models.py:411 report/models.py:449
msgid "Filters"
msgstr ""
-#: label/models.py:273
+#: label/models.py:274
msgid "Query filters (comma-separated list of key=value pairs"
msgstr ""
-#: label/models.py:301
+#: label/models.py:302
msgid "Part query filters (comma-separated value of key=value pairs)"
msgstr ""
@@ -3715,7 +3783,7 @@ msgstr ""
#: templates/email/overdue_purchase_order.html:15
#: templates/js/translated/order.js:619 templates/js/translated/order.js:1136
#: templates/js/translated/order.js:1959 templates/js/translated/part.js:970
-#: templates/js/translated/stock.js:1909 templates/js/translated/stock.js:2536
+#: templates/js/translated/stock.js:1911 templates/js/translated/stock.js:2544
msgid "Purchase Order"
msgstr ""
@@ -3734,9 +3802,9 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:734
+#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:681
#: stock/serializers.py:169 stock/templates/stock/item_base.html:189
-#: templates/js/translated/stock.js:1960
+#: templates/js/translated/stock.js:1962
msgid "Purchase Price"
msgstr ""
@@ -3926,10 +3994,6 @@ msgstr ""
msgid "Enter serial numbers for incoming stock items"
msgstr ""
-#: order/serializers.py:486
-msgid "Barcode Hash"
-msgstr ""
-
#: order/serializers.py:487
msgid "Unique identifier field"
msgstr ""
@@ -4129,8 +4193,8 @@ msgstr ""
#: part/templates/part/import_wizard/ajax_match_fields.html:64
#: part/templates/part/import_wizard/ajax_match_references.html:42
#: part/templates/part/import_wizard/match_references.html:49
-#: templates/js/translated/bom.js:77 templates/js/translated/build.js:463
-#: templates/js/translated/build.js:615 templates/js/translated/build.js:2015
+#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479
+#: templates/js/translated/build.js:631 templates/js/translated/build.js:2031
#: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586
#: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625
#: templates/js/translated/stock.js:793
@@ -4253,7 +4317,7 @@ msgstr ""
#: order/templates/order/sales_order_detail.html:72
#: templates/attachment_table.html:6 templates/js/translated/bom.js:1116
-#: templates/js/translated/build.js:1923
+#: templates/js/translated/build.js:1939
msgid "Actions"
msgstr ""
@@ -4328,7 +4392,7 @@ msgid "This field is required"
msgstr ""
#: part/bom.py:127 part/models.py:98 part/models.py:824
-#: part/templates/part/category.html:114 part/templates/part/part_base.html:330
+#: part/templates/part/category.html:114 part/templates/part/part_base.html:343
msgid "Default Location"
msgstr ""
@@ -4336,15 +4400,15 @@ msgstr ""
msgid "Total Stock"
msgstr ""
-#: part/bom.py:129 part/templates/part/part_base.html:189
+#: part/bom.py:129 part/templates/part/part_base.html:195
#: templates/js/translated/order.js:3918
msgid "Available Stock"
msgstr ""
-#: part/bom.py:130 part/templates/part/part_base.html:207
-#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1853
+#: part/bom.py:130 part/templates/part/part_base.html:213
+#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1869
#: templates/js/translated/part.js:588 templates/js/translated/part.js:608
-#: templates/js/translated/part.js:1337 templates/js/translated/part.js:1520
+#: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524
#: templates/js/translated/table_filters.js:68
msgid "On Order"
msgstr ""
@@ -4365,15 +4429,15 @@ msgstr ""
msgid "Default keywords for parts in this category"
msgstr ""
-#: part/models.py:107 stock/models.py:84
+#: part/models.py:107 stock/models.py:85
msgid "Icon"
msgstr ""
-#: part/models.py:108 stock/models.py:85
+#: part/models.py:108 stock/models.py:86
msgid "Icon (optional)"
msgstr ""
-#: part/models.py:122 part/models.py:2516 part/templates/part/category.html:16
+#: part/models.py:122 part/models.py:2504 part/templates/part/category.html:16
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
@@ -4390,7 +4454,7 @@ msgstr ""
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84
#: templates/InvenTree/settings/sidebar.html:41
-#: templates/js/translated/part.js:2004 templates/js/translated/search.js:146
+#: templates/js/translated/part.js:2015 templates/js/translated/search.js:146
#: templates/navbar.html:24 users/models.py:38
msgid "Parts"
msgstr ""
@@ -4420,7 +4484,7 @@ msgstr ""
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:745 part/models.py:2570
+#: part/models.py:745 part/models.py:2558
msgid "Part name"
msgstr ""
@@ -4445,7 +4509,7 @@ msgid "Part description"
msgstr ""
#: part/models.py:775 part/templates/part/category.html:92
-#: part/templates/part/part_base.html:294
+#: part/templates/part/part_base.html:300
msgid "Keywords"
msgstr ""
@@ -4453,11 +4517,11 @@ msgstr ""
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:783 part/models.py:2265 part/models.py:2515
-#: part/templates/part/part_base.html:257
+#: part/models.py:783 part/models.py:2253 part/models.py:2503
+#: part/templates/part/part_base.html:263
#: templates/InvenTree/settings/settings.html:232
#: templates/js/translated/notification.js:50
-#: templates/js/translated/part.js:1477 templates/js/translated/part.js:1717
+#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1722
msgid "Category"
msgstr ""
@@ -4465,8 +4529,8 @@ msgstr ""
msgid "Part category"
msgstr ""
-#: part/models.py:789 part/templates/part/part_base.html:266
-#: templates/js/translated/part.js:737 templates/js/translated/part.js:1430
+#: part/models.py:789 part/templates/part/part_base.html:272
+#: templates/js/translated/part.js:737 templates/js/translated/part.js:1429
#: templates/js/translated/stock.js:1726
msgid "IPN"
msgstr ""
@@ -4479,7 +4543,7 @@ msgstr ""
msgid "Part revision or version number"
msgstr ""
-#: part/models.py:797 part/templates/part/part_base.html:273
+#: part/models.py:797 part/templates/part/part_base.html:279
#: report/models.py:171 templates/js/translated/part.js:741
msgid "Revision"
msgstr ""
@@ -4488,7 +4552,7 @@ msgstr ""
msgid "Where is this item normally stored?"
msgstr ""
-#: part/models.py:867 part/templates/part/part_base.html:339
+#: part/models.py:867 part/templates/part/part_base.html:352
msgid "Default Supplier"
msgstr ""
@@ -4504,7 +4568,7 @@ msgstr ""
msgid "Expiry time (in days) for stock items of this part"
msgstr ""
-#: part/models.py:881 part/templates/part/part_base.html:200
+#: part/models.py:881 part/templates/part/part_base.html:206
msgid "Minimum Stock"
msgstr ""
@@ -4568,249 +4632,249 @@ msgstr ""
msgid "Creation User"
msgstr ""
-#: part/models.py:1783
+#: part/models.py:1771
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2312
+#: part/models.py:2300
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2329
+#: part/models.py:2317
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2349 templates/js/translated/part.js:2055
+#: part/models.py:2337 templates/js/translated/part.js:2066
#: templates/js/translated/stock.js:1340
msgid "Test Name"
msgstr ""
-#: part/models.py:2350
+#: part/models.py:2338
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2355
+#: part/models.py:2343
msgid "Test Description"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2344
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2361 templates/js/translated/part.js:2064
+#: part/models.py:2349 templates/js/translated/part.js:2075
#: templates/js/translated/table_filters.js:302
msgid "Required"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2350
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2367 templates/js/translated/part.js:2072
+#: part/models.py:2355 templates/js/translated/part.js:2083
msgid "Requires Value"
msgstr ""
-#: part/models.py:2368
+#: part/models.py:2356
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2373 templates/js/translated/part.js:2079
+#: part/models.py:2361 templates/js/translated/part.js:2090
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2374
+#: part/models.py:2362
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2382
+#: part/models.py:2370
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2418
+#: part/models.py:2406
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2426
+#: part/models.py:2414
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2433
+#: part/models.py:2421
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2438
+#: part/models.py:2426
msgid "Parameter description"
msgstr ""
-#: part/models.py:2471
+#: part/models.py:2459
msgid "Parent Part"
msgstr ""
-#: part/models.py:2473 part/models.py:2521 part/models.py:2522
+#: part/models.py:2461 part/models.py:2509 part/models.py:2510
#: templates/InvenTree/settings/settings.html:227
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Data"
msgstr ""
-#: part/models.py:2475
+#: part/models.py:2463
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2526 templates/InvenTree/settings/settings.html:236
+#: part/models.py:2514 templates/InvenTree/settings/settings.html:236
msgid "Default Value"
msgstr ""
-#: part/models.py:2527
+#: part/models.py:2515
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2562
+#: part/models.py:2550
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2565 templates/js/translated/model_renderers.js:212
+#: part/models.py:2553 templates/js/translated/model_renderers.js:212
msgid "Part ID"
msgstr ""
-#: part/models.py:2566
+#: part/models.py:2554
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2569
+#: part/models.py:2557
msgid "Part Name"
msgstr ""
-#: part/models.py:2573
+#: part/models.py:2561
msgid "Part IPN"
msgstr ""
-#: part/models.py:2574
+#: part/models.py:2562
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2577
+#: part/models.py:2565
msgid "Level"
msgstr ""
-#: part/models.py:2578
+#: part/models.py:2566
msgid "BOM level"
msgstr ""
-#: part/models.py:2647
+#: part/models.py:2635
msgid "Select parent part"
msgstr ""
-#: part/models.py:2655
+#: part/models.py:2643
msgid "Sub part"
msgstr ""
-#: part/models.py:2656
+#: part/models.py:2644
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2662
+#: part/models.py:2650
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2664 part/templates/part/upload_bom.html:58
+#: part/models.py:2652 part/templates/part/upload_bom.html:58
#: templates/js/translated/bom.js:876 templates/js/translated/bom.js:1005
#: templates/js/translated/table_filters.js:100
msgid "Optional"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2652
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2667 part/templates/part/upload_bom.html:55
+#: part/models.py:2655 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2668
+#: part/models.py:2656
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2671
+#: part/models.py:2659
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2674
+#: part/models.py:2662
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2676
+#: part/models.py:2664
msgid "Checksum"
msgstr ""
-#: part/models.py:2676
+#: part/models.py:2664
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2680 part/templates/part/upload_bom.html:57
+#: part/models.py:2668 part/templates/part/upload_bom.html:57
#: templates/js/translated/bom.js:1022
#: templates/js/translated/table_filters.js:76
#: templates/js/translated/table_filters.js:96
msgid "Inherited"
msgstr ""
-#: part/models.py:2681
+#: part/models.py:2669
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2686 part/templates/part/upload_bom.html:56
+#: part/models.py:2674 part/templates/part/upload_bom.html:56
#: templates/js/translated/bom.js:1014
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2687
+#: part/models.py:2675
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2765 stock/models.py:468
+#: part/models.py:2753 stock/models.py:447
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2774 part/models.py:2776
+#: part/models.py:2762 part/models.py:2764
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2881
+#: part/models.py:2869
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:2902
+#: part/models.py:2890
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:2915
+#: part/models.py:2903
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:2923
+#: part/models.py:2911
msgid "Substitute part"
msgstr ""
-#: part/models.py:2938
+#: part/models.py:2926
msgid "Part 1"
msgstr ""
-#: part/models.py:2942
+#: part/models.py:2930
msgid "Part 2"
msgstr ""
-#: part/models.py:2942
+#: part/models.py:2930
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2960
+#: part/models.py:2948
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:2964
+#: part/models.py:2952
msgid "Duplicate relationship already exists"
msgstr ""
@@ -4818,75 +4882,75 @@ msgstr ""
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:815
+#: part/serializers.py:828
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:823
+#: part/serializers.py:836
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:824
+#: part/serializers.py:837
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:829
+#: part/serializers.py:842
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:830
+#: part/serializers.py:843
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:835
+#: part/serializers.py:848
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:836
+#: part/serializers.py:849
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:841
+#: part/serializers.py:854
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:842
+#: part/serializers.py:855
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:882
+#: part/serializers.py:895
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:883
+#: part/serializers.py:896
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:913
+#: part/serializers.py:926
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:956
+#: part/serializers.py:969
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:959
+#: part/serializers.py:972
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:962
+#: part/serializers.py:975
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:971
+#: part/serializers.py:984
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:979
+#: part/serializers.py:992
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1000
+#: part/serializers.py:1013
msgid "At least one BOM item is required"
msgstr ""
@@ -5060,7 +5124,7 @@ msgstr ""
msgid "Refresh scheduling data"
msgstr ""
-#: part/templates/part/detail.html:45 templates/js/translated/tables.js:560
+#: part/templates/part/detail.html:45 templates/js/translated/tables.js:524
msgid "Refresh"
msgstr ""
@@ -5180,22 +5244,22 @@ msgstr ""
msgid "Add Test Result Template"
msgstr ""
-#: part/templates/part/detail.html:914
+#: part/templates/part/detail.html:913
#, python-format
msgid "Purchase Unit Price - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:926
+#: part/templates/part/detail.html:925
#, python-format
msgid "Unit Price-Cost Difference - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:938
+#: part/templates/part/detail.html:937
#, python-format
msgid "Supplier Unit Cost - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:1027
+#: part/templates/part/detail.html:1026
#, python-format
msgid "Unit Price - %(currency)s"
msgstr ""
@@ -5256,88 +5320,80 @@ msgstr ""
msgid "Subscribe to notifications for this part"
msgstr ""
-#: part/templates/part/part_base.html:43
-#: stock/templates/stock/item_base.html:41
-#: stock/templates/stock/location.html:48
-msgid "Barcode actions"
-msgstr ""
-
-#: part/templates/part/part_base.html:46
-#: stock/templates/stock/item_base.html:45
-#: stock/templates/stock/location.html:50 templates/qr_button.html:1
-msgid "Show QR Code"
-msgstr ""
-
#: part/templates/part/part_base.html:49
+msgid "Unink Barcode"
+msgstr ""
+
+#: part/templates/part/part_base.html:54
#: stock/templates/stock/item_base.html:63
-#: stock/templates/stock/location.html:52
+#: stock/templates/stock/location.html:57
msgid "Print Label"
msgstr ""
-#: part/templates/part/part_base.html:55
+#: part/templates/part/part_base.html:60
msgid "Show pricing information"
msgstr ""
-#: part/templates/part/part_base.html:60
+#: part/templates/part/part_base.html:65
#: stock/templates/stock/item_base.html:111
-#: stock/templates/stock/location.html:61
+#: stock/templates/stock/location.html:66
msgid "Stock actions"
msgstr ""
-#: part/templates/part/part_base.html:67
+#: part/templates/part/part_base.html:72
msgid "Count part stock"
msgstr ""
-#: part/templates/part/part_base.html:73
+#: part/templates/part/part_base.html:78
msgid "Transfer part stock"
msgstr ""
-#: part/templates/part/part_base.html:88
+#: part/templates/part/part_base.html:93
msgid "Part actions"
msgstr ""
-#: part/templates/part/part_base.html:91
+#: part/templates/part/part_base.html:96
msgid "Duplicate part"
msgstr ""
-#: part/templates/part/part_base.html:94
+#: part/templates/part/part_base.html:99
msgid "Edit part"
msgstr ""
-#: part/templates/part/part_base.html:97
+#: part/templates/part/part_base.html:102
msgid "Delete part"
msgstr ""
-#: part/templates/part/part_base.html:116
+#: part/templates/part/part_base.html:121
msgid "Part is a template part (variants can be made from this part)"
msgstr ""
-#: part/templates/part/part_base.html:120
+#: part/templates/part/part_base.html:125
msgid "Part can be assembled from other parts"
msgstr ""
-#: part/templates/part/part_base.html:124
+#: part/templates/part/part_base.html:129
msgid "Part can be used in assemblies"
msgstr ""
-#: part/templates/part/part_base.html:128
+#: part/templates/part/part_base.html:133
msgid "Part stock is tracked by serial number"
msgstr ""
-#: part/templates/part/part_base.html:132
+#: part/templates/part/part_base.html:137
msgid "Part can be purchased from external suppliers"
msgstr ""
-#: part/templates/part/part_base.html:136
+#: part/templates/part/part_base.html:141
msgid "Part can be sold to customers"
msgstr ""
-#: part/templates/part/part_base.html:142
-#: part/templates/part/part_base.html:150
+#: part/templates/part/part_base.html:147
+#: part/templates/part/part_base.html:155
msgid "Part is virtual (not a physical part)"
msgstr ""
-#: part/templates/part/part_base.html:143
+#: part/templates/part/part_base.html:148
#: templates/js/translated/company.js:659
#: templates/js/translated/company.js:920
#: templates/js/translated/model_renderers.js:204
@@ -5345,64 +5401,68 @@ msgstr ""
msgid "Inactive"
msgstr ""
-#: part/templates/part/part_base.html:160
-#: part/templates/part/part_base.html:586
+#: part/templates/part/part_base.html:165
+#: part/templates/part/part_base.html:618
msgid "Show Part Details"
msgstr ""
-#: part/templates/part/part_base.html:177
+#: part/templates/part/part_base.html:183
#, python-format
msgid "This part is a variant of %(link)s"
msgstr ""
-#: part/templates/part/part_base.html:194
+#: part/templates/part/part_base.html:200
#: templates/js/translated/company.js:1027
#: templates/js/translated/table_filters.js:201
msgid "In Stock"
msgstr ""
-#: part/templates/part/part_base.html:215
+#: part/templates/part/part_base.html:221
#: stock/templates/stock/item_base.html:382
msgid "Allocated to Build Orders"
msgstr ""
-#: part/templates/part/part_base.html:224
+#: part/templates/part/part_base.html:230
#: stock/templates/stock/item_base.html:375
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/templates/part/part_base.html:232 templates/js/translated/bom.js:1043
+#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1043
msgid "Can Build"
msgstr ""
-#: part/templates/part/part_base.html:238 templates/js/translated/part.js:591
-#: templates/js/translated/part.js:611 templates/js/translated/part.js:1341
-#: templates/js/translated/part.js:1527
+#: part/templates/part/part_base.html:244 templates/js/translated/part.js:591
+#: templates/js/translated/part.js:611 templates/js/translated/part.js:1340
+#: templates/js/translated/part.js:1531
msgid "Building"
msgstr ""
-#: part/templates/part/part_base.html:287
+#: part/templates/part/part_base.html:293
msgid "Minimum stock level"
msgstr ""
-#: part/templates/part/part_base.html:316
+#: part/templates/part/part_base.html:329
msgid "Latest Serial Number"
msgstr ""
-#: part/templates/part/part_base.html:320
+#: part/templates/part/part_base.html:333
#: stock/templates/stock/item_base.html:331
msgid "Search for serial number"
msgstr ""
-#: part/templates/part/part_base.html:443 part/templates/part/prices.html:149
+#: part/templates/part/part_base.html:429
+msgid "Link Barcode to Part"
+msgstr ""
+
+#: part/templates/part/part_base.html:475 part/templates/part/prices.html:149
msgid "Calculate"
msgstr ""
-#: part/templates/part/part_base.html:486
+#: part/templates/part/part_base.html:518
msgid "No matching images found"
msgstr ""
-#: part/templates/part/part_base.html:580
+#: part/templates/part/part_base.html:612
msgid "Hide Part Details"
msgstr ""
@@ -5468,7 +5528,7 @@ msgstr ""
#: report/templates/report/inventree_test_report_base.html:97
#: templates/InvenTree/settings/plugin.html:53
#: templates/InvenTree/settings/plugin_settings.html:38
-#: templates/js/translated/order.js:2001 templates/js/translated/stock.js:2464
+#: templates/js/translated/order.js:2001 templates/js/translated/stock.js:2472
msgid "Date"
msgstr ""
@@ -5563,7 +5623,7 @@ msgid "No sale pice history available for this part."
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:614
-#: templates/js/translated/part.js:1329 templates/js/translated/part.js:1331
+#: templates/js/translated/part.js:1328 templates/js/translated/part.js:1330
msgid "No Stock"
msgstr ""
@@ -5666,44 +5726,24 @@ msgstr ""
msgid "No matching action found"
msgstr ""
-#: plugin/base/barcodes/api.py:52 plugin/base/barcodes/api.py:154
+#: plugin/base/barcodes/api.py:51 plugin/base/barcodes/api.py:109
msgid "Must provide barcode_data parameter"
msgstr ""
-#: plugin/base/barcodes/api.py:128
+#: plugin/base/barcodes/api.py:81
msgid "No match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:130
+#: plugin/base/barcodes/api.py:85
msgid "Match found for barcode data"
msgstr ""
-#: plugin/base/barcodes/api.py:157
-msgid "Must provide stockitem parameter"
+#: plugin/base/barcodes/api.py:124
+msgid "Barcode matches existing item"
msgstr ""
-#: plugin/base/barcodes/api.py:164
-msgid "No matching stock item found"
-msgstr ""
-
-#: plugin/base/barcodes/api.py:194
-msgid "Barcode already matches Stock Item"
-msgstr ""
-
-#: plugin/base/barcodes/api.py:198
-msgid "Barcode already matches Stock Location"
-msgstr ""
-
-#: plugin/base/barcodes/api.py:202
-msgid "Barcode already matches Part"
-msgstr ""
-
-#: plugin/base/barcodes/api.py:208 plugin/base/barcodes/api.py:220
-msgid "Barcode hash already matches Stock Item"
-msgstr ""
-
-#: plugin/base/barcodes/api.py:226
-msgid "Barcode associated with Stock Item"
+#: plugin/base/barcodes/api.py:210
+msgid "No match found for provided value"
msgstr ""
#: plugin/base/label/label.py:60
@@ -5954,9 +5994,9 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:648 stock/templates/stock/item_base.html:320
-#: templates/js/translated/build.js:456 templates/js/translated/build.js:608
-#: templates/js/translated/build.js:1209 templates/js/translated/build.js:1706
+#: stock/models.py:595 stock/templates/stock/item_base.html:320
+#: templates/js/translated/build.js:472 templates/js/translated/build.js:624
+#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722
#: templates/js/translated/model_renderers.js:118
#: templates/js/translated/order.js:121 templates/js/translated/order.js:3597
#: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490
@@ -5968,12 +6008,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2083
+#: stock/models.py:2030
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2089
+#: stock/models.py:2036
msgid "Result"
msgstr ""
@@ -5992,7 +6032,7 @@ msgstr ""
#: report/templates/report/inventree_test_report_base.html:137
#: templates/js/translated/stock.js:610 templates/js/translated/stock.js:780
-#: templates/js/translated/stock.js:2713
+#: templates/js/translated/stock.js:2721
msgid "Serial"
msgstr ""
@@ -6008,241 +6048,241 @@ msgstr ""
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:89 stock/models.py:739
+#: stock/models.py:90 stock/models.py:686
#: stock/templates/stock/item_base.html:250
msgid "Owner"
msgstr ""
-#: stock/models.py:90 stock/models.py:740
+#: stock/models.py:91 stock/models.py:687
msgid "Select Owner"
msgstr ""
-#: stock/models.py:442
+#: stock/models.py:421
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:474 stock/serializers.py:93
+#: stock/models.py:453 stock/serializers.py:93
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:491
+#: stock/models.py:470
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:501 stock/models.py:510
+#: stock/models.py:480 stock/models.py:489
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:502
+#: stock/models.py:481
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:524
+#: stock/models.py:503
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:530
+#: stock/models.py:509
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:544
+#: stock/models.py:523
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:590
+#: stock/models.py:537
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:600
+#: stock/models.py:547
msgid "Base part"
msgstr ""
-#: stock/models.py:608
+#: stock/models.py:555
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:615 stock/templates/stock/location.html:17
+#: stock/models.py:562 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr ""
-#: stock/models.py:618
+#: stock/models.py:565
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:572
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:631 stock/templates/stock/item_base.html:359
+#: stock/models.py:578 stock/templates/stock/item_base.html:359
msgid "Installed In"
msgstr ""
-#: stock/models.py:634
+#: stock/models.py:581
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:650
+#: stock/models.py:597
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:664
+#: stock/models.py:611
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:669
+#: stock/models.py:616
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:678
+#: stock/models.py:625
msgid "Source Build"
msgstr ""
-#: stock/models.py:680
+#: stock/models.py:627
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:691
+#: stock/models.py:638
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:694
+#: stock/models.py:641
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:700
+#: stock/models.py:647
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:706 stock/templates/stock/item_base.html:427
-#: templates/js/translated/stock.js:1879
+#: stock/models.py:653 stock/templates/stock/item_base.html:427
+#: templates/js/translated/stock.js:1881
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:707
+#: stock/models.py:654
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:720
+#: stock/models.py:667
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:720
+#: stock/models.py:667
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:727 stock/templates/stock/item.html:132
+#: stock/models.py:674 stock/templates/stock/item.html:132
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:735
+#: stock/models.py:682
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:763
+#: stock/models.py:710
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1242
+#: stock/models.py:1189
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1248
+#: stock/models.py:1195
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1254
+#: stock/models.py:1201
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1257
+#: stock/models.py:1204
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1260
+#: stock/models.py:1207
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1267
+#: stock/models.py:1214
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1337
+#: stock/models.py:1284
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1340
+#: stock/models.py:1287
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1343
+#: stock/models.py:1290
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1346
+#: stock/models.py:1293
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1349
+#: stock/models.py:1296
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1352
+#: stock/models.py:1299
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1359 stock/serializers.py:959
+#: stock/models.py:1306 stock/serializers.py:959
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1363
+#: stock/models.py:1310
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1367
+#: stock/models.py:1314
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1371
+#: stock/models.py:1318
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1540
+#: stock/models.py:1487
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:2001
+#: stock/models.py:1948
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2059
+#: stock/models.py:2006
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2065
+#: stock/models.py:2012
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2084
+#: stock/models.py:2031
msgid "Test name"
msgstr ""
-#: stock/models.py:2090
+#: stock/models.py:2037
msgid "Test result"
msgstr ""
-#: stock/models.py:2096
+#: stock/models.py:2043
msgid "Test output value"
msgstr ""
-#: stock/models.py:2103
+#: stock/models.py:2050
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2109
+#: stock/models.py:2056
msgid "Test notes"
msgstr ""
@@ -6408,7 +6448,7 @@ msgstr ""
msgid "Installed Stock Items"
msgstr ""
-#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2857
+#: stock/templates/stock/item.html:152 templates/js/translated/stock.js:2865
msgid "Install Stock Item"
msgstr ""
@@ -6424,16 +6464,6 @@ msgstr ""
msgid "Locate stock item"
msgstr ""
-#: stock/templates/stock/item_base.html:48
-#: templates/js/translated/barcode.js:383
-#: templates/js/translated/barcode.js:388
-msgid "Unlink Barcode"
-msgstr ""
-
-#: stock/templates/stock/item_base.html:50
-msgid "Link Barcode"
-msgstr ""
-
#: stock/templates/stock/item_base.html:52 templates/stock_table.html:21
msgid "Scan to Location"
msgstr ""
@@ -6447,7 +6477,7 @@ msgid "Stock adjustment actions"
msgstr ""
#: stock/templates/stock/item_base.html:80
-#: stock/templates/stock/location.html:68 templates/stock_table.html:47
+#: stock/templates/stock/location.html:73 templates/stock_table.html:47
msgid "Count stock"
msgstr ""
@@ -6464,7 +6494,7 @@ msgid "Serialize stock"
msgstr ""
#: stock/templates/stock/item_base.html:89
-#: stock/templates/stock/location.html:74 templates/stock_table.html:48
+#: stock/templates/stock/location.html:79 templates/stock_table.html:48
msgid "Transfer stock"
msgstr ""
@@ -6508,10 +6538,6 @@ msgstr ""
msgid "Delete stock item"
msgstr ""
-#: stock/templates/stock/item_base.html:161
-msgid "Barcode Identifier"
-msgstr ""
-
#: stock/templates/stock/item_base.html:196
msgid "Parent Item"
msgstr ""
@@ -6525,7 +6551,7 @@ msgid "You are not in the list of owners of this item. This stock item cannot be
msgstr ""
#: stock/templates/stock/item_base.html:255
-#: stock/templates/stock/location.html:132
+#: stock/templates/stock/location.html:137
msgid "Read only"
msgstr ""
@@ -6574,7 +6600,7 @@ msgid "Available Quantity"
msgstr ""
#: stock/templates/stock/item_base.html:392
-#: templates/js/translated/build.js:1729
+#: templates/js/translated/build.js:1745
msgid "No location set"
msgstr ""
@@ -6604,7 +6630,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:440
#: templates/js/translated/company.js:1038
-#: templates/js/translated/stock.js:1895
+#: templates/js/translated/stock.js:1897
msgid "Last Updated"
msgstr ""
@@ -6620,23 +6646,27 @@ msgstr ""
msgid "Edit Stock Status"
msgstr ""
-#: stock/templates/stock/item_base.html:592
+#: stock/templates/stock/item_base.html:539
+msgid "Link Barcode to Stock Item"
+msgstr ""
+
+#: stock/templates/stock/item_base.html:603
msgid "Select one of the part variants listed below."
msgstr ""
-#: stock/templates/stock/item_base.html:595
+#: stock/templates/stock/item_base.html:606
msgid "Warning"
msgstr ""
-#: stock/templates/stock/item_base.html:596
+#: stock/templates/stock/item_base.html:607
msgid "This action cannot be easily undone"
msgstr ""
-#: stock/templates/stock/item_base.html:604
+#: stock/templates/stock/item_base.html:615
msgid "Convert Stock Item"
msgstr ""
-#: stock/templates/stock/item_base.html:632
+#: stock/templates/stock/item_base.html:643
msgid "Return to Stock"
msgstr ""
@@ -6652,58 +6682,62 @@ msgstr ""
msgid "Locate stock location"
msgstr ""
-#: stock/templates/stock/location.html:54
+#: stock/templates/stock/location.html:59
msgid "Check-in Items"
msgstr ""
-#: stock/templates/stock/location.html:82
+#: stock/templates/stock/location.html:87
msgid "Location actions"
msgstr ""
-#: stock/templates/stock/location.html:84
+#: stock/templates/stock/location.html:89
msgid "Edit location"
msgstr ""
-#: stock/templates/stock/location.html:86
+#: stock/templates/stock/location.html:91
msgid "Delete location"
msgstr ""
-#: stock/templates/stock/location.html:95
+#: stock/templates/stock/location.html:100
msgid "Create new stock location"
msgstr ""
-#: stock/templates/stock/location.html:96
+#: stock/templates/stock/location.html:101
msgid "New Location"
msgstr ""
-#: stock/templates/stock/location.html:114
-#: stock/templates/stock/location.html:120
+#: stock/templates/stock/location.html:119
+#: stock/templates/stock/location.html:125
msgid "Location Path"
msgstr ""
-#: stock/templates/stock/location.html:121
+#: stock/templates/stock/location.html:126
msgid "Top level stock location"
msgstr ""
-#: stock/templates/stock/location.html:127
+#: stock/templates/stock/location.html:132
msgid "Location Owner"
msgstr ""
-#: stock/templates/stock/location.html:131
+#: stock/templates/stock/location.html:136
msgid "You are not in the list of owners of this location. This stock location cannot be edited."
msgstr ""
-#: stock/templates/stock/location.html:147
-#: stock/templates/stock/location.html:194
+#: stock/templates/stock/location.html:159
+#: stock/templates/stock/location.html:206
#: stock/templates/stock/location_sidebar.html:5
msgid "Sublocations"
msgstr ""
-#: stock/templates/stock/location.html:161 templates/InvenTree/search.html:167
+#: stock/templates/stock/location.html:173 templates/InvenTree/search.html:167
#: templates/js/translated/search.js:240 users/models.py:39
msgid "Stock Locations"
msgstr ""
+#: stock/templates/stock/location.html:364
+msgid "Link Barcode to Stock Location"
+msgstr ""
+
#: stock/templates/stock/stock_app_base.html:16
msgid "Loading..."
msgstr ""
@@ -6724,10 +6758,6 @@ msgstr ""
msgid "Stock Location QR code"
msgstr ""
-#: stock/views.py:125
-msgid "Stock Item QR Code"
-msgstr ""
-
#: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7
msgid "Permission Denied"
msgstr ""
@@ -7248,7 +7278,7 @@ msgid "Change Password"
msgstr ""
#: templates/InvenTree/settings/user.html:23
-#: templates/js/translated/helpers.js:29 templates/notes_buttons.html:3
+#: templates/js/translated/helpers.js:31 templates/notes_buttons.html:3
#: templates/notes_buttons.html:4
msgid "Edit"
msgstr ""
@@ -7774,7 +7804,7 @@ msgid "Click on the following link to view this part"
msgstr ""
#: templates/email/low_stock_notification.html:19
-#: templates/js/translated/part.js:2551
+#: templates/js/translated/part.js:2562
msgid "Minimum Quantity"
msgstr ""
@@ -7915,56 +7945,52 @@ msgstr ""
msgid "No URL in response"
msgstr ""
-#: templates/js/translated/barcode.js:362
-msgid "Link Barcode to Stock Item"
+#: templates/js/translated/barcode.js:383
+msgid "This will remove the link to the associated barcode"
msgstr ""
-#: templates/js/translated/barcode.js:385
-msgid "This will remove the association between this stock item and the barcode"
-msgstr ""
-
-#: templates/js/translated/barcode.js:391
+#: templates/js/translated/barcode.js:389
msgid "Unlink"
msgstr ""
-#: templates/js/translated/barcode.js:456 templates/js/translated/stock.js:1054
+#: templates/js/translated/barcode.js:451 templates/js/translated/stock.js:1054
msgid "Remove stock item"
msgstr ""
-#: templates/js/translated/barcode.js:498
+#: templates/js/translated/barcode.js:493
msgid "Check Stock Items into Location"
msgstr ""
-#: templates/js/translated/barcode.js:502
-#: templates/js/translated/barcode.js:634
+#: templates/js/translated/barcode.js:497
+#: templates/js/translated/barcode.js:629
msgid "Check In"
msgstr ""
-#: templates/js/translated/barcode.js:533
+#: templates/js/translated/barcode.js:528
msgid "No barcode provided"
msgstr ""
-#: templates/js/translated/barcode.js:568
+#: templates/js/translated/barcode.js:563
msgid "Stock Item already scanned"
msgstr ""
-#: templates/js/translated/barcode.js:572
+#: templates/js/translated/barcode.js:567
msgid "Stock Item already in this location"
msgstr ""
-#: templates/js/translated/barcode.js:579
+#: templates/js/translated/barcode.js:574
msgid "Added stock item"
msgstr ""
-#: templates/js/translated/barcode.js:586
+#: templates/js/translated/barcode.js:581
msgid "Barcode does not match Stock Item"
msgstr ""
-#: templates/js/translated/barcode.js:629
+#: templates/js/translated/barcode.js:624
msgid "Check Into Location"
msgstr ""
-#: templates/js/translated/barcode.js:692
+#: templates/js/translated/barcode.js:687
msgid "Barcode does not match a valid location"
msgstr ""
@@ -8086,25 +8112,25 @@ msgstr ""
msgid "Substitutes Available"
msgstr ""
-#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1805
+#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1821
msgid "Variant stock allowed"
msgstr ""
-#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1857
+#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1873
#: templates/js/translated/order.js:3932
msgid "No Stock Available"
msgstr ""
-#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1861
+#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1877
msgid "Includes variant and substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1863
-#: templates/js/translated/part.js:761 templates/js/translated/part.js:1533
+#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1879
+#: templates/js/translated/part.js:761 templates/js/translated/part.js:1537
msgid "Includes variant stock"
msgstr ""
-#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1865
+#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1881
msgid "Includes substitute stock"
msgstr ""
@@ -8148,11 +8174,11 @@ msgstr ""
msgid "Delete BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1650
+#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1666
msgid "No BOM items found"
msgstr ""
-#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1789
+#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1805
msgid "Required Part"
msgstr ""
@@ -8184,256 +8210,260 @@ msgstr ""
msgid "There are incomplete outputs remaining for this build order"
msgstr ""
-#: templates/js/translated/build.js:217
+#: templates/js/translated/build.js:239
msgid "Build order is ready to be completed"
msgstr ""
-#: templates/js/translated/build.js:222
+#: templates/js/translated/build.js:247
+msgid "This build order cannot be completed as there are incomplete outputs"
+msgstr ""
+
+#: templates/js/translated/build.js:252
msgid "Build Order is incomplete"
msgstr ""
-#: templates/js/translated/build.js:254
+#: templates/js/translated/build.js:270
msgid "Complete Build Order"
msgstr ""
-#: templates/js/translated/build.js:295 templates/js/translated/stock.js:92
+#: templates/js/translated/build.js:311 templates/js/translated/stock.js:92
#: templates/js/translated/stock.js:214
msgid "Next available serial number"
msgstr ""
-#: templates/js/translated/build.js:297 templates/js/translated/stock.js:94
+#: templates/js/translated/build.js:313 templates/js/translated/stock.js:94
#: templates/js/translated/stock.js:216
msgid "Latest serial number"
msgstr ""
-#: templates/js/translated/build.js:306
+#: templates/js/translated/build.js:322
msgid "The Bill of Materials contains trackable parts"
msgstr ""
-#: templates/js/translated/build.js:307
+#: templates/js/translated/build.js:323
msgid "Build outputs must be generated individually"
msgstr ""
-#: templates/js/translated/build.js:315
+#: templates/js/translated/build.js:331
msgid "Trackable parts can have serial numbers specified"
msgstr ""
-#: templates/js/translated/build.js:316
+#: templates/js/translated/build.js:332
msgid "Enter serial numbers to generate multiple single build outputs"
msgstr ""
-#: templates/js/translated/build.js:323
+#: templates/js/translated/build.js:339
msgid "Create Build Output"
msgstr ""
-#: templates/js/translated/build.js:354
+#: templates/js/translated/build.js:370
msgid "Allocate stock items to this build output"
msgstr ""
-#: templates/js/translated/build.js:365
+#: templates/js/translated/build.js:381
msgid "Unallocate stock from build output"
msgstr ""
-#: templates/js/translated/build.js:374
+#: templates/js/translated/build.js:390
msgid "Complete build output"
msgstr ""
-#: templates/js/translated/build.js:382
+#: templates/js/translated/build.js:398
msgid "Delete build output"
msgstr ""
-#: templates/js/translated/build.js:405
+#: templates/js/translated/build.js:421
msgid "Are you sure you wish to unallocate stock items from this build?"
msgstr ""
-#: templates/js/translated/build.js:423
+#: templates/js/translated/build.js:439
msgid "Unallocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:443 templates/js/translated/build.js:595
+#: templates/js/translated/build.js:459 templates/js/translated/build.js:611
msgid "Select Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:444 templates/js/translated/build.js:596
+#: templates/js/translated/build.js:460 templates/js/translated/build.js:612
msgid "At least one build output must be selected"
msgstr ""
-#: templates/js/translated/build.js:498 templates/js/translated/build.js:650
+#: templates/js/translated/build.js:514 templates/js/translated/build.js:666
msgid "Output"
msgstr ""
-#: templates/js/translated/build.js:516
+#: templates/js/translated/build.js:532
msgid "Complete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:663
+#: templates/js/translated/build.js:679
msgid "Delete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:753
+#: templates/js/translated/build.js:769
msgid "No build order allocations found"
msgstr ""
-#: templates/js/translated/build.js:790
+#: templates/js/translated/build.js:806
msgid "Location not specified"
msgstr ""
-#: templates/js/translated/build.js:1169
+#: templates/js/translated/build.js:1185
msgid "No active build outputs found"
msgstr ""
-#: templates/js/translated/build.js:1238
+#: templates/js/translated/build.js:1254
msgid "Allocated Stock"
msgstr ""
-#: templates/js/translated/build.js:1245
+#: templates/js/translated/build.js:1261
msgid "No tracked BOM items for this build"
msgstr ""
-#: templates/js/translated/build.js:1267
+#: templates/js/translated/build.js:1283
msgid "Completed Tests"
msgstr ""
-#: templates/js/translated/build.js:1272
+#: templates/js/translated/build.js:1288
msgid "No required tests for this build"
msgstr ""
-#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2697
+#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2713
#: templates/js/translated/order.js:3632
msgid "Edit stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1748 templates/js/translated/build.js:2698
+#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2714
#: templates/js/translated/order.js:3633
msgid "Delete stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1766
+#: templates/js/translated/build.js:1782
msgid "Edit Allocation"
msgstr ""
-#: templates/js/translated/build.js:1776
+#: templates/js/translated/build.js:1792
msgid "Remove Allocation"
msgstr ""
-#: templates/js/translated/build.js:1801
+#: templates/js/translated/build.js:1817
msgid "Substitute parts available"
msgstr ""
-#: templates/js/translated/build.js:1818
+#: templates/js/translated/build.js:1834
msgid "Quantity Per"
msgstr ""
-#: templates/js/translated/build.js:1847 templates/js/translated/order.js:3939
+#: templates/js/translated/build.js:1863 templates/js/translated/order.js:3939
msgid "Insufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1849 templates/js/translated/order.js:3937
+#: templates/js/translated/build.js:1865 templates/js/translated/order.js:3937
msgid "Sufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1882 templates/js/translated/build.js:2127
-#: templates/js/translated/build.js:2693 templates/js/translated/order.js:3951
+#: templates/js/translated/build.js:1898 templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2709 templates/js/translated/order.js:3951
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1930 templates/js/translated/order.js:4031
+#: templates/js/translated/build.js:1946 templates/js/translated/order.js:4031
msgid "Build stock"
msgstr ""
-#: templates/js/translated/build.js:1934 templates/stock_table.html:50
+#: templates/js/translated/build.js:1950 templates/stock_table.html:50
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1937 templates/js/translated/order.js:4024
+#: templates/js/translated/build.js:1953 templates/js/translated/order.js:4024
msgid "Allocate stock"
msgstr ""
-#: templates/js/translated/build.js:1976 templates/js/translated/label.js:172
+#: templates/js/translated/build.js:1992 templates/js/translated/label.js:172
#: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1977 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:1993 templates/js/translated/order.js:3160
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2026 templates/js/translated/order.js:3108
+#: templates/js/translated/build.js:2042 templates/js/translated/order.js:3108
msgid "Specify stock allocation quantity"
msgstr ""
-#: templates/js/translated/build.js:2100
+#: templates/js/translated/build.js:2116
msgid "All Parts Allocated"
msgstr ""
-#: templates/js/translated/build.js:2101
+#: templates/js/translated/build.js:2117
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2115 templates/js/translated/order.js:3174
+#: templates/js/translated/build.js:2131 templates/js/translated/order.js:3174
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
-#: templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2159
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2154 templates/js/translated/order.js:3271
+#: templates/js/translated/build.js:2170 templates/js/translated/order.js:3271
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2226 templates/js/translated/order.js:3348
+#: templates/js/translated/build.js:2242 templates/js/translated/order.js:3348
msgid "No matching stock items"
msgstr ""
-#: templates/js/translated/build.js:2323
+#: templates/js/translated/build.js:2339
msgid "Automatic Stock Allocation"
msgstr ""
-#: templates/js/translated/build.js:2324
+#: templates/js/translated/build.js:2340
msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines"
msgstr ""
-#: templates/js/translated/build.js:2326
+#: templates/js/translated/build.js:2342
msgid "If a location is specifed, stock will only be allocated from that location"
msgstr ""
-#: templates/js/translated/build.js:2327
+#: templates/js/translated/build.js:2343
msgid "If stock is considered interchangeable, it will be allocated from the first location it is found"
msgstr ""
-#: templates/js/translated/build.js:2328
+#: templates/js/translated/build.js:2344
msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found"
msgstr ""
-#: templates/js/translated/build.js:2349
+#: templates/js/translated/build.js:2365
msgid "Allocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:2455
+#: templates/js/translated/build.js:2471
msgid "No builds matching query"
msgstr ""
-#: templates/js/translated/build.js:2490 templates/js/translated/part.js:1422
-#: templates/js/translated/part.js:1948 templates/js/translated/stock.js:1686
-#: templates/js/translated/stock.js:2382
+#: templates/js/translated/build.js:2506 templates/js/translated/part.js:1421
+#: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686
+#: templates/js/translated/stock.js:2384
msgid "Select"
msgstr ""
-#: templates/js/translated/build.js:2504
+#: templates/js/translated/build.js:2520
msgid "Build order is overdue"
msgstr ""
-#: templates/js/translated/build.js:2532
+#: templates/js/translated/build.js:2548
msgid "Progress"
msgstr ""
-#: templates/js/translated/build.js:2568 templates/js/translated/stock.js:2643
+#: templates/js/translated/build.js:2584 templates/js/translated/stock.js:2651
msgid "No user information"
msgstr ""
-#: templates/js/translated/build.js:2674
+#: templates/js/translated/build.js:2690
msgid "No parts allocated for"
msgstr ""
@@ -8621,35 +8651,35 @@ msgstr ""
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1922 templates/search.html:29
+#: templates/js/translated/forms.js:1923 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2175
+#: templates/js/translated/forms.js:2176
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2653
+#: templates/js/translated/forms.js:2654
msgid "Select Columns"
msgstr ""
-#: templates/js/translated/helpers.js:22
+#: templates/js/translated/helpers.js:24
msgid "YES"
msgstr ""
-#: templates/js/translated/helpers.js:24
+#: templates/js/translated/helpers.js:26
msgid "NO"
msgstr ""
-#: templates/js/translated/helpers.js:321
+#: templates/js/translated/helpers.js:362
msgid "Notes updated"
msgstr ""
@@ -9004,7 +9034,7 @@ msgstr ""
msgid "Quantity to receive"
msgstr ""
-#: templates/js/translated/order.js:1546 templates/js/translated/stock.js:2140
+#: templates/js/translated/order.js:1546 templates/js/translated/stock.js:2142
msgid "Stock Status"
msgstr ""
@@ -9068,7 +9098,7 @@ msgstr ""
#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2503
#: templates/js/translated/order.js:3842 templates/js/translated/order.js:4350
-#: templates/js/translated/part.js:2184 templates/js/translated/part.js:2782
+#: templates/js/translated/part.js:2195 templates/js/translated/part.js:2793
msgid "Unit Price"
msgstr ""
@@ -9423,7 +9453,7 @@ msgstr ""
msgid "Copy Bill of Materials"
msgstr ""
-#: templates/js/translated/part.js:584 templates/js/translated/part.js:1515
+#: templates/js/translated/part.js:584 templates/js/translated/part.js:1519
#: templates/js/translated/table_filters.js:468
msgid "Low stock"
msgstr ""
@@ -9460,140 +9490,140 @@ msgstr ""
msgid "Delete Part Relationship"
msgstr ""
-#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1602
+#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1607
msgid "No parts found"
msgstr ""
-#: templates/js/translated/part.js:1482
+#: templates/js/translated/part.js:1486
msgid "No category"
msgstr ""
-#: templates/js/translated/part.js:1513
+#: templates/js/translated/part.js:1517
msgid "No stock"
msgstr ""
-#: templates/js/translated/part.js:1537
+#: templates/js/translated/part.js:1541
msgid "Allocated to build orders"
msgstr ""
-#: templates/js/translated/part.js:1541
+#: templates/js/translated/part.js:1545
msgid "Allocated to sales orders"
msgstr ""
-#: templates/js/translated/part.js:1626 templates/js/translated/part.js:1869
-#: templates/js/translated/stock.js:2343
+#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1874
+#: templates/js/translated/stock.js:2345
msgid "Display as list"
msgstr ""
-#: templates/js/translated/part.js:1642
+#: templates/js/translated/part.js:1647
msgid "Display as grid"
msgstr ""
-#: templates/js/translated/part.js:1708
+#: templates/js/translated/part.js:1713
msgid "Set the part category for the selected parts"
msgstr ""
-#: templates/js/translated/part.js:1713
+#: templates/js/translated/part.js:1718
msgid "Set Part Category"
msgstr ""
-#: templates/js/translated/part.js:1718
+#: templates/js/translated/part.js:1723
msgid "Select Part Category"
msgstr ""
-#: templates/js/translated/part.js:1731
+#: templates/js/translated/part.js:1736
msgid "Category is required"
msgstr ""
-#: templates/js/translated/part.js:1888 templates/js/translated/stock.js:2362
+#: templates/js/translated/part.js:1893 templates/js/translated/stock.js:2364
msgid "Display as tree"
msgstr ""
-#: templates/js/translated/part.js:1967
+#: templates/js/translated/part.js:1972
msgid "Load Subcategories"
msgstr ""
-#: templates/js/translated/part.js:1983
+#: templates/js/translated/part.js:1988
msgid "Subscribed category"
msgstr ""
-#: templates/js/translated/part.js:2041
+#: templates/js/translated/part.js:2052
msgid "No test templates matching query"
msgstr ""
-#: templates/js/translated/part.js:2092 templates/js/translated/stock.js:1299
+#: templates/js/translated/part.js:2103 templates/js/translated/stock.js:1299
msgid "Edit test result"
msgstr ""
-#: templates/js/translated/part.js:2093 templates/js/translated/stock.js:1300
+#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1300
#: templates/js/translated/stock.js:1560
msgid "Delete test result"
msgstr ""
-#: templates/js/translated/part.js:2099
+#: templates/js/translated/part.js:2110
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/translated/part.js:2121
+#: templates/js/translated/part.js:2132
msgid "Edit Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2135
+#: templates/js/translated/part.js:2146
msgid "Delete Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2160
+#: templates/js/translated/part.js:2171
#, python-brace-format
msgid "No ${human_name} information found"
msgstr ""
-#: templates/js/translated/part.js:2217
+#: templates/js/translated/part.js:2228
#, python-brace-format
msgid "Edit ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2218
+#: templates/js/translated/part.js:2229
#, python-brace-format
msgid "Delete ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2383 templates/js/translated/part.js:2384
+#: templates/js/translated/part.js:2394 templates/js/translated/part.js:2395
msgid "No date specified"
msgstr ""
-#: templates/js/translated/part.js:2386
+#: templates/js/translated/part.js:2397
msgid "Specified date is in the past"
msgstr ""
-#: templates/js/translated/part.js:2392
+#: templates/js/translated/part.js:2403
msgid "Speculative"
msgstr ""
-#: templates/js/translated/part.js:2442
+#: templates/js/translated/part.js:2453
msgid "No scheduling information available for this part"
msgstr ""
-#: templates/js/translated/part.js:2448
+#: templates/js/translated/part.js:2459
msgid "Error fetching scheduling information for this part"
msgstr ""
-#: templates/js/translated/part.js:2544
+#: templates/js/translated/part.js:2555
msgid "Scheduled Stock Quantities"
msgstr ""
-#: templates/js/translated/part.js:2560
+#: templates/js/translated/part.js:2571
msgid "Maximum Quantity"
msgstr ""
-#: templates/js/translated/part.js:2605
+#: templates/js/translated/part.js:2616
msgid "Minimum Stock Level"
msgstr ""
-#: templates/js/translated/part.js:2706
+#: templates/js/translated/part.js:2717
msgid "Single Price"
msgstr ""
-#: templates/js/translated/part.js:2725
+#: templates/js/translated/part.js:2736
msgid "Single Price Difference"
msgstr ""
@@ -9907,156 +9937,156 @@ msgstr ""
msgid "No stock location set"
msgstr ""
-#: templates/js/translated/stock.js:1775
+#: templates/js/translated/stock.js:1777
msgid "Stock item is in production"
msgstr ""
-#: templates/js/translated/stock.js:1780
+#: templates/js/translated/stock.js:1782
msgid "Stock item assigned to sales order"
msgstr ""
-#: templates/js/translated/stock.js:1783
+#: templates/js/translated/stock.js:1785
msgid "Stock item assigned to customer"
msgstr ""
-#: templates/js/translated/stock.js:1786
+#: templates/js/translated/stock.js:1788
msgid "Serialized stock item has been allocated"
msgstr ""
-#: templates/js/translated/stock.js:1788
+#: templates/js/translated/stock.js:1790
msgid "Stock item has been fully allocated"
msgstr ""
-#: templates/js/translated/stock.js:1790
+#: templates/js/translated/stock.js:1792
msgid "Stock item has been partially allocated"
msgstr ""
-#: templates/js/translated/stock.js:1793
+#: templates/js/translated/stock.js:1795
msgid "Stock item has been installed in another item"
msgstr ""
-#: templates/js/translated/stock.js:1797
+#: templates/js/translated/stock.js:1799
msgid "Stock item has expired"
msgstr ""
-#: templates/js/translated/stock.js:1799
+#: templates/js/translated/stock.js:1801
msgid "Stock item will expire soon"
msgstr ""
-#: templates/js/translated/stock.js:1806
+#: templates/js/translated/stock.js:1808
msgid "Stock item has been rejected"
msgstr ""
-#: templates/js/translated/stock.js:1808
+#: templates/js/translated/stock.js:1810
msgid "Stock item is lost"
msgstr ""
-#: templates/js/translated/stock.js:1810
+#: templates/js/translated/stock.js:1812
msgid "Stock item is destroyed"
msgstr ""
-#: templates/js/translated/stock.js:1814
+#: templates/js/translated/stock.js:1816
#: templates/js/translated/table_filters.js:196
msgid "Depleted"
msgstr ""
-#: templates/js/translated/stock.js:1865
+#: templates/js/translated/stock.js:1867
msgid "Stocktake"
msgstr ""
-#: templates/js/translated/stock.js:1944
+#: templates/js/translated/stock.js:1946
msgid "Supplier part not specified"
msgstr ""
-#: templates/js/translated/stock.js:1982
+#: templates/js/translated/stock.js:1984
msgid "No stock items matching query"
msgstr ""
-#: templates/js/translated/stock.js:2155
+#: templates/js/translated/stock.js:2157
msgid "Set Stock Status"
msgstr ""
-#: templates/js/translated/stock.js:2169
+#: templates/js/translated/stock.js:2171
msgid "Select Status Code"
msgstr ""
-#: templates/js/translated/stock.js:2170
+#: templates/js/translated/stock.js:2172
msgid "Status code must be selected"
msgstr ""
-#: templates/js/translated/stock.js:2400
+#: templates/js/translated/stock.js:2402
msgid "Load Subloactions"
msgstr ""
-#: templates/js/translated/stock.js:2489
+#: templates/js/translated/stock.js:2497
msgid "Details"
msgstr ""
-#: templates/js/translated/stock.js:2505
+#: templates/js/translated/stock.js:2513
msgid "Part information unavailable"
msgstr ""
-#: templates/js/translated/stock.js:2527
+#: templates/js/translated/stock.js:2535
msgid "Location no longer exists"
msgstr ""
-#: templates/js/translated/stock.js:2546
+#: templates/js/translated/stock.js:2554
msgid "Purchase order no longer exists"
msgstr ""
-#: templates/js/translated/stock.js:2565
+#: templates/js/translated/stock.js:2573
msgid "Customer no longer exists"
msgstr ""
-#: templates/js/translated/stock.js:2583
+#: templates/js/translated/stock.js:2591
msgid "Stock item no longer exists"
msgstr ""
-#: templates/js/translated/stock.js:2606
+#: templates/js/translated/stock.js:2614
msgid "Added"
msgstr ""
-#: templates/js/translated/stock.js:2614
+#: templates/js/translated/stock.js:2622
msgid "Removed"
msgstr ""
-#: templates/js/translated/stock.js:2690
+#: templates/js/translated/stock.js:2698
msgid "No installed items"
msgstr ""
-#: templates/js/translated/stock.js:2741 templates/js/translated/stock.js:2777
+#: templates/js/translated/stock.js:2749 templates/js/translated/stock.js:2785
msgid "Uninstall Stock Item"
msgstr ""
-#: templates/js/translated/stock.js:2790
+#: templates/js/translated/stock.js:2798
msgid "Select stock item to uninstall"
msgstr ""
-#: templates/js/translated/stock.js:2811
+#: templates/js/translated/stock.js:2819
msgid "Install another stock item into this item"
msgstr ""
-#: templates/js/translated/stock.js:2812
+#: templates/js/translated/stock.js:2820
msgid "Stock items can only be installed if they meet the following criteria"
msgstr ""
-#: templates/js/translated/stock.js:2814
+#: templates/js/translated/stock.js:2822
msgid "The Stock Item links to a Part which is the BOM for this Stock Item"
msgstr ""
-#: templates/js/translated/stock.js:2815
+#: templates/js/translated/stock.js:2823
msgid "The Stock Item is currently available in stock"
msgstr ""
-#: templates/js/translated/stock.js:2816
+#: templates/js/translated/stock.js:2824
msgid "The Stock Item is not already installed in another item"
msgstr ""
-#: templates/js/translated/stock.js:2817
+#: templates/js/translated/stock.js:2825
msgid "The Stock Item is tracked by either a batch code or serial number"
msgstr ""
-#: templates/js/translated/stock.js:2830
+#: templates/js/translated/stock.js:2838
msgid "Select part to install"
msgstr ""
@@ -10312,57 +10342,57 @@ msgstr ""
msgid "Select File Format"
msgstr ""
-#: templates/js/translated/tables.js:537
+#: templates/js/translated/tables.js:501
msgid "Loading data"
msgstr ""
-#: templates/js/translated/tables.js:540
+#: templates/js/translated/tables.js:504
msgid "rows per page"
msgstr ""
-#: templates/js/translated/tables.js:545
+#: templates/js/translated/tables.js:509
msgid "Showing all rows"
msgstr ""
-#: templates/js/translated/tables.js:547
+#: templates/js/translated/tables.js:511
msgid "Showing"
msgstr ""
-#: templates/js/translated/tables.js:547
+#: templates/js/translated/tables.js:511
msgid "to"
msgstr ""
-#: templates/js/translated/tables.js:547
+#: templates/js/translated/tables.js:511
msgid "of"
msgstr ""
-#: templates/js/translated/tables.js:547
+#: templates/js/translated/tables.js:511
msgid "rows"
msgstr ""
-#: templates/js/translated/tables.js:551 templates/navbar.html:102
+#: templates/js/translated/tables.js:515 templates/navbar.html:102
#: templates/search.html:8 templates/search_form.html:6
#: templates/search_form.html:7
msgid "Search"
msgstr ""
-#: templates/js/translated/tables.js:554
+#: templates/js/translated/tables.js:518
msgid "No matching results"
msgstr ""
-#: templates/js/translated/tables.js:557
+#: templates/js/translated/tables.js:521
msgid "Hide/Show pagination"
msgstr ""
-#: templates/js/translated/tables.js:563
+#: templates/js/translated/tables.js:527
msgid "Toggle"
msgstr ""
-#: templates/js/translated/tables.js:566
+#: templates/js/translated/tables.js:530
msgid "Columns"
msgstr ""
-#: templates/js/translated/tables.js:569
+#: templates/js/translated/tables.js:533
msgid "All"
msgstr ""
diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po
index da99bbe10f..c8c36402aa 100644
--- a/InvenTree/locale/ru/LC_MESSAGES/django.po
+++ b/InvenTree/locale/ru/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-20 09:03+0000\n"
-"PO-Revision-Date: 2022-09-21 00:45\n"
+"POT-Creation-Date: 2022-09-24 13:47+0000\n"
+"PO-Revision-Date: 2022-09-25 01:07\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru_RU\n"
@@ -36,11 +36,11 @@ msgstr "Введите дату"
#: order/templates/order/so_sidebar.html:17
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:172
-#: stock/models.py:1947 stock/models.py:2055 stock/serializers.py:327
+#: stock/models.py:1941 stock/models.py:2049 stock/serializers.py:327
#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823
#: stock/serializers.py:922 stock/serializers.py:1054
#: stock/templates/stock/stock_sidebar.html:25
-#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1107
+#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1121
#: templates/js/translated/company.js:1022
#: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555
#: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004
@@ -168,117 +168,117 @@ msgstr ""
msgid "Remove HTML tags from this value"
msgstr ""
-#: InvenTree/models.py:236
+#: InvenTree/models.py:238
msgid "Improperly formatted pattern"
msgstr ""
-#: InvenTree/models.py:243
+#: InvenTree/models.py:245
msgid "Unknown format key specified"
msgstr ""
-#: InvenTree/models.py:249
+#: InvenTree/models.py:251
msgid "Missing required format key"
msgstr ""
-#: InvenTree/models.py:261
+#: InvenTree/models.py:263
msgid "Reference field cannot be empty"
msgstr ""
-#: InvenTree/models.py:268
+#: InvenTree/models.py:270
msgid "Reference must match required pattern"
msgstr ""
-#: InvenTree/models.py:304
+#: InvenTree/models.py:306
msgid "Reference number is too large"
msgstr ""
-#: InvenTree/models.py:382
+#: InvenTree/models.py:384
msgid "Missing file"
msgstr "Файл не найден"
-#: InvenTree/models.py:383
+#: InvenTree/models.py:385
msgid "Missing external link"
msgstr "Отсутствует внешняя ссылка"
-#: InvenTree/models.py:395 stock/models.py:2049
+#: InvenTree/models.py:405 stock/models.py:2043
#: templates/js/translated/attachment.js:103
#: templates/js/translated/attachment.js:241
msgid "Attachment"
msgstr "Вложения"
-#: InvenTree/models.py:396
+#: InvenTree/models.py:406
msgid "Select file to attach"
msgstr "Выберите файл для вложения"
-#: InvenTree/models.py:402 company/models.py:124 company/models.py:276
+#: InvenTree/models.py:412 company/models.py:124 company/models.py:276
#: company/models.py:511 order/models.py:84 order/models.py:1249
#: part/models.py:802 part/templates/part/part_scheduling.html:11
#: report/templates/report/inventree_build_order_base.html:164
#: templates/js/translated/company.js:691
#: templates/js/translated/company.js:1011
-#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1568
+#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567
msgid "Link"
msgstr "Ссылка"
-#: InvenTree/models.py:403 build/models.py:285 part/models.py:803
-#: stock/models.py:605
+#: InvenTree/models.py:413 build/models.py:285 part/models.py:803
+#: stock/models.py:604
msgid "Link to external URL"
msgstr "Ссылка на внешний URL"
-#: InvenTree/models.py:406 templates/js/translated/attachment.js:104
+#: InvenTree/models.py:416 templates/js/translated/attachment.js:104
#: templates/js/translated/attachment.js:285
msgid "Comment"
msgstr "Комментарий"
-#: InvenTree/models.py:406
+#: InvenTree/models.py:416
msgid "File comment"
msgstr "Комментарий к файлу"
-#: InvenTree/models.py:412 InvenTree/models.py:413 common/models.py:1669
-#: common/models.py:1670 common/models.py:1893 common/models.py:1894
-#: common/models.py:2156 common/models.py:2157 part/models.py:2235
-#: part/models.py:2255 plugin/models.py:260 plugin/models.py:261
+#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679
+#: common/models.py:1680 common/models.py:1903 common/models.py:1904
+#: common/models.py:2166 common/models.py:2167 part/models.py:2240
+#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2645
msgid "User"
msgstr "Пользователь"
-#: InvenTree/models.py:416
+#: InvenTree/models.py:426
msgid "upload date"
msgstr "дата загрузки"
-#: InvenTree/models.py:438
+#: InvenTree/models.py:448
msgid "Filename must not be empty"
msgstr "Имя файла не должно быть пустым"
-#: InvenTree/models.py:447
+#: InvenTree/models.py:457
msgid "Invalid attachment directory"
msgstr "Неверная директория вложений"
-#: InvenTree/models.py:457
+#: InvenTree/models.py:467
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "Имя файла содержит запрещенные символы '{c}'"
-#: InvenTree/models.py:460
+#: InvenTree/models.py:470
msgid "Filename missing extension"
msgstr "Отсутствует расширение для имени файла"
-#: InvenTree/models.py:467
+#: InvenTree/models.py:477
msgid "Attachment with this filename already exists"
msgstr "Вложение с таким именем файла уже существует"
-#: InvenTree/models.py:474
+#: InvenTree/models.py:484
msgid "Error renaming file"
msgstr "Ошибка переименования файла"
-#: InvenTree/models.py:510
+#: InvenTree/models.py:520
msgid "Invalid choice"
msgstr "Неверный выбор"
-#: InvenTree/models.py:547 InvenTree/models.py:548 common/models.py:1879
+#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889
#: company/models.py:358 label/models.py:101 part/models.py:746
-#: part/models.py:2413 plugin/models.py:94 report/models.py:152
+#: part/models.py:2418 plugin/models.py:94 report/models.py:152
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin.html:134
@@ -288,16 +288,16 @@ msgstr "Неверный выбор"
#: templates/js/translated/company.js:793
#: templates/js/translated/notification.js:71
#: templates/js/translated/part.js:686 templates/js/translated/part.js:838
-#: templates/js/translated/part.js:1961 templates/js/translated/stock.js:2390
+#: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2390
msgid "Name"
msgstr "Название"
-#: InvenTree/models.py:554 build/models.py:163
+#: InvenTree/models.py:564 build/models.py:163
#: build/templates/build/detail.html:24 company/models.py:282
#: company/models.py:517 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
#: company/templates/company/supplier_part.html:108 label/models.py:108
-#: order/models.py:82 part/models.py:769 part/models.py:2425
+#: order/models.py:82 part/models.py:769 part/models.py:2430
#: part/templates/part/category.html:80 part/templates/part/part_base.html:172
#: part/templates/part/part_scheduling.html:12 report/models.py:165
#: report/models.py:507 report/models.py:551
@@ -305,60 +305,60 @@ msgstr "Название"
#: stock/templates/stock/location.html:113
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/InvenTree/settings/settings.html:358
-#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:846
-#: templates/js/translated/build.js:2512 templates/js/translated/company.js:444
+#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862
+#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444
#: templates/js/translated/company.js:702
#: templates/js/translated/company.js:986 templates/js/translated/order.js:1988
#: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831
#: templates/js/translated/part.js:745 templates/js/translated/part.js:1187
-#: templates/js/translated/part.js:1463 templates/js/translated/part.js:1997
-#: templates/js/translated/part.js:2072 templates/js/translated/stock.js:1744
+#: templates/js/translated/part.js:1462 templates/js/translated/part.js:1996
+#: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1744
#: templates/js/translated/stock.js:2422 templates/js/translated/stock.js:2482
msgid "Description"
msgstr "Описание"
-#: InvenTree/models.py:555
+#: InvenTree/models.py:565
msgid "Description (optional)"
msgstr "Описание (необязательно)"
-#: InvenTree/models.py:563
+#: InvenTree/models.py:573
msgid "parent"
msgstr "родитель"
-#: InvenTree/models.py:570 InvenTree/models.py:571
-#: templates/js/translated/part.js:2006 templates/js/translated/stock.js:2431
+#: InvenTree/models.py:580 InvenTree/models.py:581
+#: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2431
msgid "Path"
msgstr "Путь"
-#: InvenTree/models.py:672
+#: InvenTree/models.py:682
msgid "Barcode Data"
msgstr ""
-#: InvenTree/models.py:673
+#: InvenTree/models.py:683
msgid "Third party barcode data"
msgstr ""
-#: InvenTree/models.py:678 order/serializers.py:486
+#: InvenTree/models.py:688 order/serializers.py:486
msgid "Barcode Hash"
msgstr ""
-#: InvenTree/models.py:679
+#: InvenTree/models.py:689
msgid "Unique hash of barcode data"
msgstr ""
-#: InvenTree/models.py:724
+#: InvenTree/models.py:734
msgid "Existing barcode found"
msgstr ""
-#: InvenTree/models.py:777
+#: InvenTree/models.py:787
msgid "Server Error"
msgstr ""
-#: InvenTree/models.py:778
+#: InvenTree/models.py:788
msgid "An error has been logged by the server."
msgstr ""
-#: InvenTree/serializers.py:55 part/models.py:2741
+#: InvenTree/serializers.py:55 part/models.py:2766
msgid "Must be a valid number"
msgstr "Должно быть действительным номером"
@@ -538,7 +538,7 @@ msgid "InvenTree system health checks failed"
msgstr "Ошибка проверки состояния системы InvenTree"
#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140
-#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:334
+#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:342
msgid "Pending"
msgstr "Ожидаемый"
@@ -660,7 +660,7 @@ msgstr "Объединенные позиции на складе"
msgid "Converted to variant"
msgstr ""
-#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:221
+#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:229
msgid "Sent to customer"
msgstr "Отправлено клиенту"
@@ -755,7 +755,7 @@ msgstr "Неверный выбор для родительской сборки
#: report/templates/report/inventree_build_order_base.html:105
#: templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
-#: templates/js/translated/build.js:764
+#: templates/js/translated/build.js:780
msgid "Build Order"
msgstr "Порядок сборки"
@@ -774,12 +774,12 @@ msgid "Build Order Reference"
msgstr "Ссылка на заказ"
#: build/models.py:155 order/models.py:240 order/models.py:627
-#: order/models.py:908 part/models.py:2659
+#: order/models.py:908 part/models.py:2676
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
-#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:853
-#: templates/js/translated/build.js:1813 templates/js/translated/order.js:2251
+#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872
+#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251
#: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823
#: templates/js/translated/order.js:4331
msgid "Reference"
@@ -801,10 +801,10 @@ msgstr ""
#: build/models.py:180 build/templates/build/build_base.html:80
#: build/templates/build/detail.html:29 company/models.py:679
#: order/models.py:1005 order/models.py:1116 order/models.py:1117
-#: part/models.py:343 part/models.py:2181 part/models.py:2196
-#: part/models.py:2215 part/models.py:2233 part/models.py:2332
-#: part/models.py:2459 part/models.py:2549 part/models.py:2634
-#: part/models.py:2910 part/serializers.py:814
+#: part/models.py:343 part/models.py:2186 part/models.py:2201
+#: part/models.py:2220 part/models.py:2238 part/models.py:2337
+#: part/models.py:2464 part/models.py:2556 part/models.py:2641
+#: part/models.py:2935 part/serializers.py:828
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/upload_bom.html:52
@@ -816,10 +816,10 @@ msgstr ""
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:16
#: templates/email/overdue_build_order.html:16
-#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:552
-#: templates/js/translated/bom.js:689 templates/js/translated/bom.js:800
-#: templates/js/translated/build.js:1189 templates/js/translated/build.js:1682
-#: templates/js/translated/build.js:2126 templates/js/translated/build.js:2517
+#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:553
+#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816
+#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698
+#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547
#: templates/js/translated/company.js:301
#: templates/js/translated/company.js:531
#: templates/js/translated/company.js:643
@@ -828,7 +828,7 @@ msgstr ""
#: templates/js/translated/order.js:2205 templates/js/translated/order.js:3185
#: templates/js/translated/order.js:3581 templates/js/translated/order.js:3807
#: templates/js/translated/part.js:1172 templates/js/translated/part.js:1244
-#: templates/js/translated/part.js:1441 templates/js/translated/stock.js:586
+#: templates/js/translated/part.js:1440 templates/js/translated/stock.js:586
#: templates/js/translated/stock.js:751 templates/js/translated/stock.js:958
#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2508
#: templates/js/translated/stock.js:2703 templates/js/translated/stock.js:2837
@@ -847,8 +847,8 @@ msgstr "Отсылка на заказ"
msgid "SalesOrder to which this build is allocated"
msgstr ""
-#: build/models.py:202 build/serializers.py:800
-#: templates/js/translated/build.js:2114 templates/js/translated/order.js:3173
+#: build/models.py:202 build/serializers.py:819
+#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173
msgid "Source Location"
msgstr "Расположение источника"
@@ -889,7 +889,7 @@ msgid "Build status code"
msgstr "Код статуса сборки"
#: build/models.py:240 build/serializers.py:225 order/serializers.py:464
-#: stock/models.py:609 templates/js/translated/order.js:1496
+#: stock/models.py:608 templates/js/translated/order.js:1496
msgid "Batch Code"
msgstr "Код партии"
@@ -911,7 +911,7 @@ msgid "Target date for build completion. Build will be overdue after this date."
msgstr "Целевая дата для сборки. Сборка будет просрочена после этой даты."
#: build/models.py:255 order/models.py:286
-#: templates/js/translated/build.js:2594
+#: templates/js/translated/build.js:2624
msgid "Completion Date"
msgstr "Дата завершения"
@@ -919,7 +919,7 @@ msgstr "Дата завершения"
msgid "completed by"
msgstr "выполнено"
-#: build/models.py:269 templates/js/translated/build.js:2562
+#: build/models.py:269 templates/js/translated/build.js:2592
msgid "Issued by"
msgstr "Выдал/ла"
@@ -932,7 +932,7 @@ msgstr "Пользователь, выпустивший этот заказ н
#: order/templates/order/order_base.html:185
#: order/templates/order/sales_order_base.html:183 part/models.py:942
#: report/templates/report/inventree_build_order_base.html:158
-#: templates/js/translated/build.js:2574 templates/js/translated/order.js:2022
+#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022
msgid "Responsible"
msgstr "Ответственный"
@@ -943,7 +943,7 @@ msgstr "Пользователь, ответственный за этот за
#: build/models.py:284 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:188
-#: part/templates/part/part_base.html:359 stock/models.py:603
+#: part/templates/part/part_base.html:359 stock/models.py:602
#: stock/templates/stock/item_base.html:203
msgid "External Link"
msgstr "Внешняя ссылка"
@@ -973,48 +973,48 @@ msgstr "Вывод сборки уже завершен"
msgid "Build output does not match Build Order"
msgstr "Вывод сборки не совпадает с порядком сборки"
-#: build/models.py:1158
+#: build/models.py:1167
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "Элемент сборки должен указать вывод сборки, так как основная часть помечена как отслеживаемая"
-#: build/models.py:1167
+#: build/models.py:1176
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:1177 order/models.py:1383
+#: build/models.py:1186 order/models.py:1383
msgid "Stock item is over-allocated"
msgstr "Предмет на складе перераспределен"
-#: build/models.py:1183 order/models.py:1386
+#: build/models.py:1192 order/models.py:1386
msgid "Allocation quantity must be greater than zero"
msgstr "Выделенное количество должно быть больше нуля"
-#: build/models.py:1189
+#: build/models.py:1198
msgid "Quantity must be 1 for serialized stock"
msgstr "Количество должно быть 1 для сериализованных запасов"
-#: build/models.py:1246
+#: build/models.py:1255
msgid "Selected stock item not found in BOM"
msgstr "Выбранная единица хранения не найдена в BOM"
-#: build/models.py:1315 stock/templates/stock/item_base.html:175
-#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2496
+#: build/models.py:1324 stock/templates/stock/item_base.html:175
+#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526
#: templates/navbar.html:38
msgid "Build"
msgstr "Сборка"
-#: build/models.py:1316
+#: build/models.py:1325
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1332 build/serializers.py:645 order/serializers.py:1035
+#: build/models.py:1341 build/serializers.py:660 order/serializers.py:1035
#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754
#: stock/serializers.py:880 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:197
-#: templates/js/translated/build.js:774 templates/js/translated/build.js:779
-#: templates/js/translated/build.js:2128 templates/js/translated/build.js:2679
+#: templates/js/translated/build.js:790 templates/js/translated/build.js:795
+#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709
#: templates/js/translated/order.js:107 templates/js/translated/order.js:3186
#: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493
#: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680
@@ -1023,18 +1023,18 @@ msgstr ""
msgid "Stock Item"
msgstr "Предметы на складе"
-#: build/models.py:1333
+#: build/models.py:1342
msgid "Source stock item"
msgstr "Исходный складской предмет"
-#: build/models.py:1345 build/serializers.py:193
+#: build/models.py:1354 build/serializers.py:193
#: build/templates/build/build_base.html:85
-#: build/templates/build/detail.html:34 common/models.py:1701
+#: build/templates/build/detail.html:34 common/models.py:1711
#: company/templates/company/supplier_part.html:341 order/models.py:901
#: order/models.py:1427 order/serializers.py:1209
#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40
-#: part/models.py:2650 part/templates/part/detail.html:951
-#: part/templates/part/detail.html:1037
+#: part/models.py:2657 part/templates/part/detail.html:950
+#: part/templates/part/detail.html:1036
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
#: report/templates/report/inventree_build_order_base.html:113
@@ -1045,39 +1045,39 @@ msgstr "Исходный складской предмет"
#: stock/serializers.py:291 stock/templates/stock/item_base.html:290
#: stock/templates/stock/item_base.html:298
#: templates/email/build_order_completed.html:18
-#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:691
-#: templates/js/translated/bom.js:861 templates/js/translated/build.js:458
-#: templates/js/translated/build.js:610 templates/js/translated/build.js:801
-#: templates/js/translated/build.js:1211 templates/js/translated/build.js:1708
-#: templates/js/translated/build.js:2129
+#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:692
+#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474
+#: templates/js/translated/build.js:626 templates/js/translated/build.js:817
+#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724
+#: templates/js/translated/build.js:2159
#: templates/js/translated/model_renderers.js:120
#: templates/js/translated/order.js:123 templates/js/translated/order.js:1137
#: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490
#: templates/js/translated/order.js:3187 templates/js/translated/order.js:3507
#: templates/js/translated/order.js:3594 templates/js/translated/order.js:3686
#: templates/js/translated/order.js:3829 templates/js/translated/order.js:4337
-#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2217
-#: templates/js/translated/part.js:2686 templates/js/translated/part.js:2727
-#: templates/js/translated/part.js:2805 templates/js/translated/stock.js:458
+#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2216
+#: templates/js/translated/part.js:2685 templates/js/translated/part.js:2726
+#: templates/js/translated/part.js:2804 templates/js/translated/stock.js:458
#: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782
#: templates/js/translated/stock.js:2630 templates/js/translated/stock.js:2715
msgid "Quantity"
msgstr "Количество"
-#: build/models.py:1346
+#: build/models.py:1355
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:1354
+#: build/models.py:1363
msgid "Install into"
msgstr ""
-#: build/models.py:1355
+#: build/models.py:1364
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:138 build/serializers.py:674
-#: templates/js/translated/build.js:1199
+#: build/serializers.py:138 build/serializers.py:689
+#: templates/js/translated/build.js:1215
msgid "Build Output"
msgstr ""
@@ -1101,9 +1101,9 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr "Введите количество для вывода сборки"
-#: build/serializers.py:208 build/serializers.py:665 order/models.py:318
-#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:545
-#: part/serializers.py:977 stock/models.py:463 stock/models.py:1198
+#: build/serializers.py:208 build/serializers.py:680 order/models.py:318
+#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558
+#: part/serializers.py:991 stock/models.py:462 stock/models.py:1192
#: stock/serializers.py:300
msgid "Quantity must be greater than zero"
msgstr "Количество должно быть больше нуля"
@@ -1147,8 +1147,8 @@ msgstr ""
#: stock/serializers.py:915 stock/serializers.py:1148
#: stock/templates/stock/item_base.html:388
#: templates/js/translated/barcode.js:431
-#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:786
-#: templates/js/translated/build.js:1720 templates/js/translated/order.js:1534
+#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:802
+#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534
#: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605
#: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694
#: templates/js/translated/part.js:181 templates/js/translated/stock.js:588
@@ -1164,7 +1164,7 @@ msgstr ""
#: build/serializers.py:373 build/templates/build/build_base.html:145
#: build/templates/build/detail.html:62 order/models.py:646
#: order/serializers.py:482 stock/templates/stock/item_base.html:421
-#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2546
+#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2576
#: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992
#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1827
#: templates/js/translated/stock.js:2599 templates/js/translated/stock.js:2731
@@ -1203,113 +1203,113 @@ msgstr ""
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:494
+#: build/serializers.py:509
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:496
+#: build/serializers.py:511
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:506
+#: build/serializers.py:521
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:511
+#: build/serializers.py:526
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:512
+#: build/serializers.py:527
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:522 templates/js/translated/build.js:227
+#: build/serializers.py:537 templates/js/translated/build.js:258
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:527 order/serializers.py:208 order/serializers.py:1103
+#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:528
+#: build/serializers.py:543
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:538 templates/js/translated/build.js:231
+#: build/serializers.py:553 templates/js/translated/build.js:262
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:547
+#: build/serializers.py:562 templates/js/translated/build.js:246
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:577 build/serializers.py:622 part/models.py:2768
-#: part/models.py:2902
+#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793
+#: part/models.py:2927
msgid "BOM Item"
msgstr "BOM Компонент"
-#: build/serializers.py:587
+#: build/serializers.py:602
msgid "Build output"
msgstr ""
-#: build/serializers.py:595
+#: build/serializers.py:610
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:636
+#: build/serializers.py:651
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:651 stock/serializers.py:767
+#: build/serializers.py:666 stock/serializers.py:767
msgid "Item must be in stock"
msgstr "Компонент должен быть в наличии"
-#: build/serializers.py:709 order/serializers.py:1093
+#: build/serializers.py:724 order/serializers.py:1093
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "Превышено доступное количество ({q})"
-#: build/serializers.py:715
+#: build/serializers.py:730
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:722
+#: build/serializers.py:737
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:727
+#: build/serializers.py:742
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:750 order/serializers.py:1373
+#: build/serializers.py:765 order/serializers.py:1373
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:801
+#: build/serializers.py:820
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:809
+#: build/serializers.py:828
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:810
+#: build/serializers.py:829
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:815
+#: build/serializers.py:834
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:816
+#: build/serializers.py:835
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:821
+#: build/serializers.py:840
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:822
+#: build/serializers.py:841
msgid "Allow allocation of substitute parts"
msgstr ""
@@ -1400,7 +1400,7 @@ msgstr ""
#: order/templates/order/order_base.html:171
#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:125
-#: templates/js/translated/build.js:2586 templates/js/translated/order.js:2009
+#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009
#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852
#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051
msgid "Target Date"
@@ -1415,16 +1415,16 @@ msgstr ""
#: build/templates/build/build_base.html:204
#: order/templates/order/order_base.html:107
#: order/templates/order/sales_order_base.html:94
-#: templates/js/translated/table_filters.js:320
-#: templates/js/translated/table_filters.js:361
-#: templates/js/translated/table_filters.js:391
+#: templates/js/translated/table_filters.js:328
+#: templates/js/translated/table_filters.js:369
+#: templates/js/translated/table_filters.js:399
msgid "Overdue"
msgstr "Просрочено"
#: build/templates/build/build_base.html:166
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
#: order/templates/order/sales_order_base.html:171
-#: templates/js/translated/table_filters.js:400
+#: templates/js/translated/table_filters.js:408
msgid "Completed"
msgstr "Завершённые"
@@ -1447,7 +1447,7 @@ msgstr "Заказ покупателя"
msgid "Issued By"
msgstr "Выдано"
-#: build/templates/build/build_base.html:256
+#: build/templates/build/build_base.html:252
msgid "Delete Build Order"
msgstr "Удалить заказ на сборку"
@@ -1478,19 +1478,19 @@ msgstr ""
#: build/templates/build/detail.html:80
#: stock/templates/stock/item_base.html:168
-#: templates/js/translated/build.js:1215
+#: templates/js/translated/build.js:1231
#: templates/js/translated/model_renderers.js:124
#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1841
#: templates/js/translated/stock.js:2738
-#: templates/js/translated/table_filters.js:159
-#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:167
+#: templates/js/translated/table_filters.js:258
msgid "Batch"
msgstr "Партия"
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:158
#: order/templates/order/sales_order_base.html:158
-#: templates/js/translated/build.js:2554
+#: templates/js/translated/build.js:2584
msgid "Created"
msgstr "Создано"
@@ -1510,7 +1510,7 @@ msgstr ""
msgid "Allocate Stock to Build"
msgstr ""
-#: build/templates/build/detail.html:176 templates/js/translated/build.js:1942
+#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967
msgid "Unallocate stock"
msgstr ""
@@ -1876,9 +1876,9 @@ msgstr ""
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:951 part/models.py:2461 report/models.py:158
+#: common/models.py:951 part/models.py:2466 report/models.py:158
#: templates/js/translated/table_filters.js:38
-#: templates/js/translated/table_filters.js:484
+#: templates/js/translated/table_filters.js:492
msgid "Template"
msgstr "Шаблон"
@@ -1886,9 +1886,9 @@ msgstr "Шаблон"
msgid "Parts are templates by default"
msgstr "По умолчанию детали являются шаблонами"
-#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1454
-#: templates/js/translated/table_filters.js:176
-#: templates/js/translated/table_filters.js:447
+#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1471
+#: templates/js/translated/table_filters.js:184
+#: templates/js/translated/table_filters.js:455
msgid "Assembly"
msgstr "Сборка"
@@ -1897,7 +1897,7 @@ msgid "Parts can be assembled from other components by default"
msgstr ""
#: common/models.py:965 part/models.py:900
-#: templates/js/translated/table_filters.js:455
+#: templates/js/translated/table_filters.js:463
msgid "Component"
msgstr "Компонент"
@@ -1914,7 +1914,7 @@ msgid "Parts are purchaseable by default"
msgstr ""
#: common/models.py:979 part/models.py:916
-#: templates/js/translated/table_filters.js:476
+#: templates/js/translated/table_filters.js:484
msgid "Salable"
msgstr "Можно продавать"
@@ -1924,8 +1924,8 @@ msgstr ""
#: common/models.py:986 part/models.py:906
#: templates/js/translated/table_filters.js:46
-#: templates/js/translated/table_filters.js:108
-#: templates/js/translated/table_filters.js:488
+#: templates/js/translated/table_filters.js:116
+#: templates/js/translated/table_filters.js:496
msgid "Trackable"
msgstr "Отслеживание"
@@ -1936,7 +1936,7 @@ msgstr "По умолчанию детали являются отслежива
#: common/models.py:993 part/models.py:926
#: part/templates/part/part_base.html:156
#: templates/js/translated/table_filters.js:42
-#: templates/js/translated/table_filters.js:492
+#: templates/js/translated/table_filters.js:500
msgid "Virtual"
msgstr ""
@@ -2300,7 +2300,7 @@ msgstr ""
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1344 common/models.py:1662
+#: common/models.py:1344 common/models.py:1672
msgid "Settings key (must be unique - case insensitive"
msgstr ""
@@ -2616,101 +2616,109 @@ msgstr ""
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1702
+#: common/models.py:1647
+msgid "Table String Length"
+msgstr ""
+
+#: common/models.py:1648
+msgid "Maximimum length limit for strings displayed in table views"
+msgstr ""
+
+#: common/models.py:1712
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1709 company/serializers.py:372
+#: common/models.py:1719 company/serializers.py:372
#: company/templates/company/supplier_part.html:346 order/models.py:942
-#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2222
+#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221
msgid "Price"
msgstr "Цена"
-#: common/models.py:1710
+#: common/models.py:1720
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1870 common/models.py:2048
+#: common/models.py:1880 common/models.py:2058
msgid "Endpoint"
msgstr ""
-#: common/models.py:1871
+#: common/models.py:1881
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1890
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1885 part/models.py:921 plugin/models.py:100
+#: common/models.py:1895 part/models.py:921 plugin/models.py:100
#: templates/js/translated/table_filters.js:34
-#: templates/js/translated/table_filters.js:104
-#: templates/js/translated/table_filters.js:316
-#: templates/js/translated/table_filters.js:442
+#: templates/js/translated/table_filters.js:112
+#: templates/js/translated/table_filters.js:324
+#: templates/js/translated/table_filters.js:450
msgid "Active"
msgstr ""
-#: common/models.py:1886
+#: common/models.py:1896
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1900
+#: common/models.py:1910
msgid "Token"
msgstr ""
-#: common/models.py:1901
+#: common/models.py:1911
msgid "Token for access"
msgstr ""
-#: common/models.py:1908
+#: common/models.py:1918
msgid "Secret"
msgstr ""
-#: common/models.py:1909
+#: common/models.py:1919
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:2015
+#: common/models.py:2025
msgid "Message ID"
msgstr ""
-#: common/models.py:2016
+#: common/models.py:2026
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:2024
+#: common/models.py:2034
msgid "Host"
msgstr ""
-#: common/models.py:2025
+#: common/models.py:2035
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:2032
+#: common/models.py:2042
msgid "Header"
msgstr ""
-#: common/models.py:2033
+#: common/models.py:2043
msgid "Header of this message"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2049
msgid "Body"
msgstr ""
-#: common/models.py:2040
+#: common/models.py:2050
msgid "Body of this message"
msgstr ""
-#: common/models.py:2049
+#: common/models.py:2059
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:2054
+#: common/models.py:2064
msgid "Worked on"
msgstr ""
-#: common/models.py:2055
+#: common/models.py:2065
msgid "Was the work on this message finished?"
msgstr ""
@@ -2859,9 +2867,9 @@ msgstr "Валюта"
msgid "Default currency used for this company"
msgstr "Для этой компании используется валюта по умолчанию"
-#: company/models.py:248 company/models.py:482 stock/models.py:545
+#: company/models.py:248 company/models.py:482 stock/models.py:544
#: stock/serializers.py:85 stock/templates/stock/item_base.html:143
-#: templates/js/translated/bom.js:542
+#: templates/js/translated/bom.js:543
msgid "Base Part"
msgstr "Базовая деталь"
@@ -2877,7 +2885,7 @@ msgstr "Выберите деталь"
#: templates/js/translated/company.js:533
#: templates/js/translated/company.js:668
#: templates/js/translated/company.js:956 templates/js/translated/part.js:236
-#: templates/js/translated/table_filters.js:419
+#: templates/js/translated/table_filters.js:427
msgid "Manufacturer"
msgstr "Производитель"
@@ -2920,7 +2928,7 @@ msgstr "Наименование параметра"
#: company/models.py:365
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2042 templates/js/translated/company.js:581
+#: stock/models.py:2036 templates/js/translated/company.js:581
#: templates/js/translated/company.js:799 templates/js/translated/part.js:847
#: templates/js/translated/stock.js:1360
msgid "Value"
@@ -2930,7 +2938,7 @@ msgstr "Значение"
msgid "Parameter value"
msgstr "Значение параметра"
-#: company/models.py:372 part/models.py:888 part/models.py:2421
+#: company/models.py:372 part/models.py:888 part/models.py:2426
#: part/templates/part/part_base.html:286
#: templates/InvenTree/settings/settings.html:352
#: templates/js/translated/company.js:805 templates/js/translated/part.js:853
@@ -2954,7 +2962,7 @@ msgstr ""
#: templates/js/translated/company.js:436
#: templates/js/translated/company.js:929 templates/js/translated/order.js:1975
#: templates/js/translated/part.js:217 templates/js/translated/part.js:993
-#: templates/js/translated/table_filters.js:423
+#: templates/js/translated/table_filters.js:431
msgid "Supplier"
msgstr "Поставщик"
@@ -2986,22 +2994,22 @@ msgid "Supplier part description"
msgstr ""
#: company/models.py:523 company/templates/company/supplier_part.html:181
-#: part/models.py:2662 part/templates/part/upload_bom.html:59
+#: part/models.py:2679 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399
msgid "Note"
msgstr "Заметка"
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "base cost"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:529 company/templates/company/supplier_part.html:167
-#: stock/models.py:571 stock/templates/stock/item_base.html:243
+#: stock/models.py:570 stock/templates/stock/item_base.html:243
#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1974
msgid "Packaging"
msgstr "Упаковка"
@@ -3023,7 +3031,7 @@ msgstr ""
msgid "Unit quantity supplied in a single pack"
msgstr ""
-#: company/models.py:539 part/models.py:1771
+#: company/models.py:539 part/models.py:1776
msgid "multiple"
msgstr ""
@@ -3034,10 +3042,10 @@ msgstr ""
#: company/models.py:547 company/templates/company/supplier_part.html:115
#: templates/email/build_order_required_stock.html:19
#: templates/email/low_stock_notification.html:18
-#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1823
-#: templates/js/translated/build.js:2686 templates/js/translated/part.js:598
+#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839
+#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598
#: templates/js/translated/part.js:601
-#: templates/js/translated/table_filters.js:186
+#: templates/js/translated/table_filters.js:194
msgid "Available"
msgstr ""
@@ -3109,13 +3117,13 @@ msgid "Download image from URL"
msgstr "Скачать изображение по ссылке"
#: company/templates/company/company_base.html:86 order/models.py:641
-#: order/templates/order/sales_order_base.html:116 stock/models.py:590
-#: stock/models.py:591 stock/serializers.py:809
+#: order/templates/order/sales_order_base.html:116 stock/models.py:589
+#: stock/models.py:590 stock/serializers.py:809
#: stock/templates/stock/item_base.html:399
#: templates/email/overdue_sales_order.html:16
#: templates/js/translated/company.js:428 templates/js/translated/order.js:2813
#: templates/js/translated/stock.js:2563
-#: templates/js/translated/table_filters.js:427
+#: templates/js/translated/table_filters.js:435
msgid "Customer"
msgstr "Покупатель"
@@ -3234,7 +3242,7 @@ msgid "New Sales Order"
msgstr "Новый заказ на продажу"
#: company/templates/company/detail.html:168
-#: templates/js/translated/build.js:1693
+#: templates/js/translated/build.js:1709
msgid "Assigned Stock"
msgstr ""
@@ -3312,7 +3320,7 @@ msgid "Delete parameters"
msgstr "Удалить параметры"
#: company/templates/company/manufacturer_part.html:245
-#: part/templates/part/detail.html:840
+#: part/templates/part/detail.html:839
msgid "Add Parameter"
msgstr "Добавить параметр"
@@ -3333,7 +3341,7 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:554
+#: company/templates/company/supplier_part.html:24 stock/models.py:553
#: stock/templates/stock/item_base.html:236
#: templates/js/translated/company.js:945 templates/js/translated/order.js:1135
#: templates/js/translated/stock.js:1931
@@ -3444,7 +3452,7 @@ msgstr "Информация о цене"
#: company/templates/company/supplier_part.html:247
#: company/templates/company/supplier_part.html:388
-#: part/templates/part/prices.html:276 templates/js/translated/part.js:2294
+#: part/templates/part/prices.html:276 templates/js/translated/part.js:2293
msgid "Add Price Break"
msgstr ""
@@ -3457,12 +3465,12 @@ msgid "No price break information found"
msgstr ""
#: company/templates/company/supplier_part.html:314
-#: templates/js/translated/part.js:2304
+#: templates/js/translated/part.js:2303
msgid "Delete Price Break"
msgstr ""
#: company/templates/company/supplier_part.html:328
-#: templates/js/translated/part.js:2318
+#: templates/js/translated/part.js:2317
msgid "Edit Price Break"
msgstr ""
@@ -3488,8 +3496,8 @@ msgstr ""
#: stock/templates/stock/stock_app_base.html:10
#: templates/InvenTree/search.html:153
#: templates/InvenTree/settings/sidebar.html:45
-#: templates/js/translated/part.js:749 templates/js/translated/part.js:1334
-#: templates/js/translated/part.js:1500 templates/js/translated/stock.js:959
+#: templates/js/translated/part.js:749 templates/js/translated/part.js:1333
+#: templates/js/translated/part.js:1499 templates/js/translated/stock.js:959
#: templates/js/translated/stock.js:1756 templates/navbar.html:31
msgid "Stock"
msgstr "Склад"
@@ -3793,7 +3801,7 @@ msgstr ""
#: order/models.py:1013 order/templates/order/order_base.html:178
#: templates/js/translated/order.js:1641 templates/js/translated/order.js:2373
#: templates/js/translated/part.js:1087 templates/js/translated/part.js:1125
-#: templates/js/translated/table_filters.js:338
+#: templates/js/translated/table_filters.js:346
msgid "Received"
msgstr ""
@@ -3801,7 +3809,7 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:681
+#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:680
#: stock/serializers.py:169 stock/templates/stock/item_base.html:189
#: templates/js/translated/stock.js:1962
msgid "Purchase Price"
@@ -4192,8 +4200,8 @@ msgstr "Выберите деталь поставщика"
#: part/templates/part/import_wizard/ajax_match_fields.html:64
#: part/templates/part/import_wizard/ajax_match_references.html:42
#: part/templates/part/import_wizard/match_references.html:49
-#: templates/js/translated/bom.js:77 templates/js/translated/build.js:463
-#: templates/js/translated/build.js:615 templates/js/translated/build.js:2015
+#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479
+#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040
#: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586
#: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625
#: templates/js/translated/stock.js:793
@@ -4315,8 +4323,8 @@ msgid "Pending Shipments"
msgstr ""
#: order/templates/order/sales_order_detail.html:72
-#: templates/attachment_table.html:6 templates/js/translated/bom.js:1116
-#: templates/js/translated/build.js:1923
+#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133
+#: templates/js/translated/build.js:1943
msgid "Actions"
msgstr "Действия"
@@ -4405,9 +4413,9 @@ msgid "Available Stock"
msgstr "Доступный запас"
#: part/bom.py:130 part/templates/part/part_base.html:213
-#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1853
+#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890
#: templates/js/translated/part.js:588 templates/js/translated/part.js:608
-#: templates/js/translated/part.js:1337 templates/js/translated/part.js:1525
+#: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524
#: templates/js/translated/table_filters.js:68
msgid "On Order"
msgstr ""
@@ -4436,7 +4444,7 @@ msgstr ""
msgid "Icon (optional)"
msgstr ""
-#: part/models.py:122 part/models.py:2504 part/templates/part/category.html:16
+#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr "Категория детали"
@@ -4453,7 +4461,7 @@ msgstr ""
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84
#: templates/InvenTree/settings/sidebar.html:41
-#: templates/js/translated/part.js:2016 templates/js/translated/search.js:146
+#: templates/js/translated/part.js:2015 templates/js/translated/search.js:146
#: templates/navbar.html:24 users/models.py:38
msgid "Parts"
msgstr "Детали"
@@ -4483,7 +4491,7 @@ msgstr ""
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:745 part/models.py:2558
+#: part/models.py:745 part/models.py:2565
msgid "Part name"
msgstr "Наименование детали"
@@ -4516,11 +4524,11 @@ msgstr "Ключевые слова"
msgid "Part keywords to improve visibility in search results"
msgstr "Ключевые слова для улучшения видимости в результатах поиска"
-#: part/models.py:783 part/models.py:2253 part/models.py:2503
+#: part/models.py:783 part/models.py:2258 part/models.py:2508
#: part/templates/part/part_base.html:263
#: templates/InvenTree/settings/settings.html:232
#: templates/js/translated/notification.js:50
-#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1723
+#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1722
msgid "Category"
msgstr "Категория"
@@ -4529,7 +4537,7 @@ msgid "Part category"
msgstr "Категория"
#: part/models.py:789 part/templates/part/part_base.html:272
-#: templates/js/translated/part.js:737 templates/js/translated/part.js:1430
+#: templates/js/translated/part.js:737 templates/js/translated/part.js:1429
#: templates/js/translated/stock.js:1726
msgid "IPN"
msgstr ""
@@ -4631,249 +4639,260 @@ msgstr ""
msgid "Creation User"
msgstr ""
-#: part/models.py:1771
+#: part/models.py:1776
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2300
+#: part/models.py:2305
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2317
+#: part/models.py:2322
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2337 templates/js/translated/part.js:2067
+#: part/models.py:2342 templates/js/translated/part.js:2066
#: templates/js/translated/stock.js:1340
msgid "Test Name"
msgstr ""
-#: part/models.py:2338
+#: part/models.py:2343
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2343
+#: part/models.py:2348
msgid "Test Description"
msgstr ""
-#: part/models.py:2344
+#: part/models.py:2349
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2349 templates/js/translated/part.js:2076
-#: templates/js/translated/table_filters.js:302
+#: part/models.py:2354 templates/js/translated/part.js:2075
+#: templates/js/translated/table_filters.js:310
msgid "Required"
msgstr ""
-#: part/models.py:2350
+#: part/models.py:2355
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2355 templates/js/translated/part.js:2084
+#: part/models.py:2360 templates/js/translated/part.js:2083
msgid "Requires Value"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2361
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2361 templates/js/translated/part.js:2091
+#: part/models.py:2366 templates/js/translated/part.js:2090
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2367
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2370
+#: part/models.py:2375
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2406
+#: part/models.py:2411
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2414
+#: part/models.py:2419
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2421
+#: part/models.py:2426
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2426
+#: part/models.py:2431
msgid "Parameter description"
msgstr ""
-#: part/models.py:2459
+#: part/models.py:2464
msgid "Parent Part"
msgstr "Родительская деталь"
-#: part/models.py:2461 part/models.py:2509 part/models.py:2510
+#: part/models.py:2466 part/models.py:2514 part/models.py:2515
#: templates/InvenTree/settings/settings.html:227
msgid "Parameter Template"
msgstr "Шаблон параметра"
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Data"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2514 templates/InvenTree/settings/settings.html:236
+#: part/models.py:2519 templates/InvenTree/settings/settings.html:236
msgid "Default Value"
msgstr ""
-#: part/models.py:2515
+#: part/models.py:2520
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2550
+#: part/models.py:2557
msgid "Part ID or part name"
msgstr "Артикул или наименование детали"
-#: part/models.py:2553 templates/js/translated/model_renderers.js:212
+#: part/models.py:2560 templates/js/translated/model_renderers.js:212
msgid "Part ID"
msgstr "Артикул"
-#: part/models.py:2554
+#: part/models.py:2561
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2557
+#: part/models.py:2564
msgid "Part Name"
msgstr "Наименование детали"
-#: part/models.py:2561
+#: part/models.py:2568
msgid "Part IPN"
msgstr "IPN"
-#: part/models.py:2562
+#: part/models.py:2569
msgid "Part IPN value"
msgstr "Значение IPN"
-#: part/models.py:2565
+#: part/models.py:2572
msgid "Level"
msgstr ""
-#: part/models.py:2566
+#: part/models.py:2573
msgid "BOM level"
msgstr ""
-#: part/models.py:2635
+#: part/models.py:2642
msgid "Select parent part"
msgstr "Выберите родительскую деталь"
-#: part/models.py:2643
+#: part/models.py:2650
msgid "Sub part"
msgstr ""
-#: part/models.py:2644
+#: part/models.py:2651
msgid "Select part to be used in BOM"
msgstr "Выбрать деталь для использования в BOM"
-#: part/models.py:2650
+#: part/models.py:2657
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2652 part/templates/part/upload_bom.html:58
-#: templates/js/translated/bom.js:876 templates/js/translated/bom.js:1005
-#: templates/js/translated/table_filters.js:100
+#: part/models.py:2661 part/templates/part/upload_bom.html:58
+#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999
+#: templates/js/translated/table_filters.js:84
+#: templates/js/translated/table_filters.js:108
msgid "Optional"
msgstr ""
-#: part/models.py:2652
+#: part/models.py:2662
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2655 part/templates/part/upload_bom.html:55
+#: part/models.py:2667 templates/js/translated/bom.js:895
+#: templates/js/translated/bom.js:1008
+#: templates/js/translated/table_filters.js:88
+msgid "Consumable"
+msgstr ""
+
+#: part/models.py:2668
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:2672 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2656
+#: part/models.py:2673
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2659
+#: part/models.py:2676
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2662
+#: part/models.py:2679
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "Checksum"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2668 part/templates/part/upload_bom.html:57
-#: templates/js/translated/bom.js:1022
+#: part/models.py:2685 part/templates/part/upload_bom.html:57
+#: templates/js/translated/bom.js:1025
#: templates/js/translated/table_filters.js:76
-#: templates/js/translated/table_filters.js:96
+#: templates/js/translated/table_filters.js:104
msgid "Inherited"
msgstr ""
-#: part/models.py:2669
+#: part/models.py:2686
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2674 part/templates/part/upload_bom.html:56
-#: templates/js/translated/bom.js:1014
+#: part/models.py:2691 part/templates/part/upload_bom.html:56
+#: templates/js/translated/bom.js:1017
msgid "Allow Variants"
msgstr "Разрешить разновидности"
-#: part/models.py:2675
+#: part/models.py:2692
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2753 stock/models.py:447
+#: part/models.py:2778 stock/models.py:446
msgid "Quantity must be integer value for trackable parts"
msgstr "Для отслеживаемых деталей количество должно быть целым числом"
-#: part/models.py:2762 part/models.py:2764
+#: part/models.py:2787 part/models.py:2789
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2869
+#: part/models.py:2894
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:2890
+#: part/models.py:2915
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:2903
+#: part/models.py:2928
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:2911
+#: part/models.py:2936
msgid "Substitute part"
msgstr ""
-#: part/models.py:2926
+#: part/models.py:2951
msgid "Part 1"
msgstr "Часть 1"
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Part 2"
msgstr "Часть 2"
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2948
+#: part/models.py:2973
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:2952
+#: part/models.py:2977
msgid "Duplicate relationship already exists"
msgstr ""
@@ -4881,75 +4900,75 @@ msgstr ""
msgid "Purchase currency of this stock item"
msgstr "Валюта покупки этой единицы хранения"
-#: part/serializers.py:815
+#: part/serializers.py:829
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:823
+#: part/serializers.py:837
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:824
+#: part/serializers.py:838
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:829
+#: part/serializers.py:843
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:830
+#: part/serializers.py:844
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:835
+#: part/serializers.py:849
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:836
+#: part/serializers.py:850
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:841
+#: part/serializers.py:855
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:842
+#: part/serializers.py:856
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:882
+#: part/serializers.py:896
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:883
+#: part/serializers.py:897
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:913
+#: part/serializers.py:927
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:956
+#: part/serializers.py:970
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:959
+#: part/serializers.py:973
msgid "No matching part found"
msgstr "Подходящая деталь не найдена"
-#: part/serializers.py:962
+#: part/serializers.py:976
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:971
+#: part/serializers.py:985
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:979
+#: part/serializers.py:993
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1000
+#: part/serializers.py:1014
msgid "At least one BOM item is required"
msgstr ""
@@ -5243,22 +5262,22 @@ msgstr ""
msgid "Add Test Result Template"
msgstr ""
-#: part/templates/part/detail.html:914
+#: part/templates/part/detail.html:913
#, python-format
msgid "Purchase Unit Price - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:926
+#: part/templates/part/detail.html:925
#, python-format
msgid "Unit Price-Cost Difference - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:938
+#: part/templates/part/detail.html:937
#, python-format
msgid "Supplier Unit Cost - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:1027
+#: part/templates/part/detail.html:1026
#, python-format
msgid "Unit Price - %(currency)s"
msgstr ""
@@ -5412,7 +5431,7 @@ msgstr "Эта деталь является разновидностью %(link
#: part/templates/part/part_base.html:200
#: templates/js/translated/company.js:1027
-#: templates/js/translated/table_filters.js:201
+#: templates/js/translated/table_filters.js:209
msgid "In Stock"
msgstr "На складе"
@@ -5426,13 +5445,13 @@ msgstr ""
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1043
+#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075
msgid "Can Build"
msgstr ""
#: part/templates/part/part_base.html:244 templates/js/translated/part.js:591
-#: templates/js/translated/part.js:611 templates/js/translated/part.js:1341
-#: templates/js/translated/part.js:1532
+#: templates/js/translated/part.js:611 templates/js/translated/part.js:1340
+#: templates/js/translated/part.js:1531
msgid "Building"
msgstr ""
@@ -5488,7 +5507,7 @@ msgid "Total Cost"
msgstr ""
#: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43
-#: templates/js/translated/bom.js:997
+#: templates/js/translated/bom.js:1066
msgid "No supplier pricing available"
msgstr ""
@@ -5583,7 +5602,7 @@ msgstr ""
msgid "Calculation parameters"
msgstr ""
-#: part/templates/part/prices.html:160 templates/js/translated/bom.js:991
+#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060
msgid "Supplier Cost"
msgstr ""
@@ -5622,7 +5641,7 @@ msgid "No sale pice history available for this part."
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:614
-#: templates/js/translated/part.js:1329 templates/js/translated/part.js:1331
+#: templates/js/translated/part.js:1328 templates/js/translated/part.js:1330
msgid "No Stock"
msgstr ""
@@ -5993,9 +6012,9 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:595 stock/templates/stock/item_base.html:320
-#: templates/js/translated/build.js:456 templates/js/translated/build.js:608
-#: templates/js/translated/build.js:1209 templates/js/translated/build.js:1706
+#: stock/models.py:594 stock/templates/stock/item_base.html:320
+#: templates/js/translated/build.js:472 templates/js/translated/build.js:624
+#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722
#: templates/js/translated/model_renderers.js:118
#: templates/js/translated/order.js:121 templates/js/translated/order.js:3597
#: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490
@@ -6007,12 +6026,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2030
+#: stock/models.py:2024
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2036
+#: stock/models.py:2030
msgid "Result"
msgstr ""
@@ -6047,241 +6066,241 @@ msgstr ""
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:90 stock/models.py:686
+#: stock/models.py:90 stock/models.py:685
#: stock/templates/stock/item_base.html:250
msgid "Owner"
msgstr ""
-#: stock/models.py:91 stock/models.py:687
+#: stock/models.py:91 stock/models.py:686
msgid "Select Owner"
msgstr ""
-#: stock/models.py:421
+#: stock/models.py:420
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:453 stock/serializers.py:93
+#: stock/models.py:452 stock/serializers.py:93
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:470
+#: stock/models.py:469
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:480 stock/models.py:489
+#: stock/models.py:479 stock/models.py:488
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:481
+#: stock/models.py:480
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:503
+#: stock/models.py:502
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:509
+#: stock/models.py:508
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:522
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:537
+#: stock/models.py:536
msgid "Parent Stock Item"
msgstr "Родительская единица хранения"
-#: stock/models.py:547
+#: stock/models.py:546
msgid "Base part"
msgstr "Базовая деталь"
-#: stock/models.py:555
+#: stock/models.py:554
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:562 stock/templates/stock/location.html:17
+#: stock/models.py:561 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "Место хранения"
-#: stock/models.py:565
+#: stock/models.py:564
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:572
+#: stock/models.py:571
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:578 stock/templates/stock/item_base.html:359
+#: stock/models.py:577 stock/templates/stock/item_base.html:359
msgid "Installed In"
msgstr ""
-#: stock/models.py:581
+#: stock/models.py:580
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:597
+#: stock/models.py:596
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:611
+#: stock/models.py:610
msgid "Batch code for this stock item"
msgstr "Код партии для этой единицы хранения"
-#: stock/models.py:616
+#: stock/models.py:615
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:624
msgid "Source Build"
msgstr "Исходная сборка"
-#: stock/models.py:627
+#: stock/models.py:626
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:638
+#: stock/models.py:637
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:640
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:647
+#: stock/models.py:646
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:653 stock/templates/stock/item_base.html:427
+#: stock/models.py:652 stock/templates/stock/item_base.html:427
#: templates/js/translated/stock.js:1881
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:654
+#: stock/models.py:653
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete on deplete"
msgstr "Удалить при обнулении"
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete this Stock Item when stock is depleted"
msgstr "Удалить эту единицу хранения при обнулении складского запаса"
-#: stock/models.py:674 stock/templates/stock/item.html:132
+#: stock/models.py:673 stock/templates/stock/item.html:132
msgid "Stock Item Notes"
msgstr "Заметки о единице хранения"
-#: stock/models.py:682
+#: stock/models.py:681
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:709
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1189
+#: stock/models.py:1183
msgid "Part is not set as trackable"
msgstr "Деталь не является отслеживаемой"
-#: stock/models.py:1195
+#: stock/models.py:1189
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1201
+#: stock/models.py:1195
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1204
+#: stock/models.py:1198
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1207
+#: stock/models.py:1201
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1214
+#: stock/models.py:1208
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1284
+#: stock/models.py:1278
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1287
+#: stock/models.py:1281
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1290
+#: stock/models.py:1284
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1293
+#: stock/models.py:1287
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1296
+#: stock/models.py:1290
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1299
+#: stock/models.py:1293
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1306 stock/serializers.py:959
+#: stock/models.py:1300 stock/serializers.py:959
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1310
+#: stock/models.py:1304
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1314
+#: stock/models.py:1308
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1318
+#: stock/models.py:1312
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1487
+#: stock/models.py:1481
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:1948
+#: stock/models.py:1942
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2006
+#: stock/models.py:2000
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2012
+#: stock/models.py:2006
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2031
+#: stock/models.py:2025
msgid "Test name"
msgstr ""
-#: stock/models.py:2037
+#: stock/models.py:2031
msgid "Test result"
msgstr ""
-#: stock/models.py:2043
+#: stock/models.py:2037
msgid "Test output value"
msgstr ""
-#: stock/models.py:2050
+#: stock/models.py:2044
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2056
+#: stock/models.py:2050
msgid "Test notes"
msgstr ""
@@ -6599,7 +6618,7 @@ msgid "Available Quantity"
msgstr ""
#: stock/templates/stock/item_base.html:392
-#: templates/js/translated/build.js:1729
+#: templates/js/translated/build.js:1745
msgid "No location set"
msgstr ""
@@ -6613,7 +6632,7 @@ msgid "This StockItem expired on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:431
-#: templates/js/translated/table_filters.js:269
+#: templates/js/translated/table_filters.js:277
msgid "Expired"
msgstr ""
@@ -6623,7 +6642,7 @@ msgid "This StockItem expires on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:433
-#: templates/js/translated/table_filters.js:275
+#: templates/js/translated/table_filters.js:283
msgid "Stale"
msgstr ""
@@ -7433,64 +7452,64 @@ msgstr ""
msgid "Do you really want to remove the selected email address?"
msgstr "Вы действительно хотите удалить выбранный адрес электронной почты?"
-#: templates/InvenTree/settings/user_display.html:27
+#: templates/InvenTree/settings/user_display.html:28
msgid "Theme Settings"
msgstr "Настройки темы"
-#: templates/InvenTree/settings/user_display.html:37
+#: templates/InvenTree/settings/user_display.html:38
msgid "Select theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:48
+#: templates/InvenTree/settings/user_display.html:49
msgid "Set Theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:56
+#: templates/InvenTree/settings/user_display.html:57
msgid "Language Settings"
msgstr "Настройки языка"
-#: templates/InvenTree/settings/user_display.html:65
+#: templates/InvenTree/settings/user_display.html:66
msgid "Select language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:81
+#: templates/InvenTree/settings/user_display.html:82
#, python-format
msgid "%(lang_translated)s%% translated"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:83
+#: templates/InvenTree/settings/user_display.html:84
msgid "No translations available"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:90
+#: templates/InvenTree/settings/user_display.html:91
msgid "Set Language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:93
+#: templates/InvenTree/settings/user_display.html:94
msgid "Some languages are not complete"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:95
+#: templates/InvenTree/settings/user_display.html:96
msgid "Show only sufficent"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "and hidden."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "Show them too"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:104
+#: templates/InvenTree/settings/user_display.html:105
msgid "Help the translation efforts!"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:105
+#: templates/InvenTree/settings/user_display.html:106
msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:106
+#: templates/InvenTree/settings/user_display.html:107
msgid "InvenTree Translation Project"
msgstr ""
@@ -7787,7 +7806,7 @@ msgid "The following parts are low on required stock"
msgstr ""
#: templates/email/build_order_required_stock.html:18
-#: templates/js/translated/bom.js:1489
+#: templates/js/translated/bom.js:1506
msgid "Required Quantity"
msgstr ""
@@ -7801,7 +7820,7 @@ msgid "Click on the following link to view this part"
msgstr ""
#: templates/email/low_stock_notification.html:19
-#: templates/js/translated/part.js:2563
+#: templates/js/translated/part.js:2562
msgid "Minimum Quantity"
msgstr "Минимальное количество"
@@ -7999,7 +8018,7 @@ msgstr ""
msgid "Row Data"
msgstr ""
-#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:620
+#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
#: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601
#: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003
#: templates/js/translated/order.js:1179 templates/modals.html:15
@@ -8069,117 +8088,118 @@ msgstr ""
msgid "Include part supplier data in exported BOM"
msgstr ""
-#: templates/js/translated/bom.js:511
+#: templates/js/translated/bom.js:512
msgid "Remove substitute part"
msgstr ""
-#: templates/js/translated/bom.js:565
+#: templates/js/translated/bom.js:566
msgid "Select and add a new substitute part using the input below"
msgstr ""
-#: templates/js/translated/bom.js:576
+#: templates/js/translated/bom.js:577
msgid "Are you sure you wish to remove this substitute part link?"
msgstr ""
-#: templates/js/translated/bom.js:582
+#: templates/js/translated/bom.js:583
msgid "Remove Substitute Part"
msgstr ""
-#: templates/js/translated/bom.js:621
+#: templates/js/translated/bom.js:622
msgid "Add Substitute"
msgstr ""
-#: templates/js/translated/bom.js:622
+#: templates/js/translated/bom.js:623
msgid "Edit BOM Item Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:684
+#: templates/js/translated/bom.js:685
msgid "All selected BOM items will be deleted"
msgstr ""
-#: templates/js/translated/bom.js:700
+#: templates/js/translated/bom.js:701
msgid "Delete selected BOM items?"
msgstr ""
-#: templates/js/translated/bom.js:819
+#: templates/js/translated/bom.js:835
msgid "Load BOM for subassembly"
msgstr ""
-#: templates/js/translated/bom.js:829
+#: templates/js/translated/bom.js:845
msgid "Substitutes Available"
msgstr ""
-#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1805
+#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821
msgid "Variant stock allowed"
msgstr ""
-#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1857
+#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872
#: templates/js/translated/order.js:3932
msgid "No Stock Available"
msgstr ""
-#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1861
+#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876
msgid "Includes variant and substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1863
-#: templates/js/translated/part.js:761 templates/js/translated/part.js:1538
+#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878
+#: templates/js/translated/part.js:761 templates/js/translated/part.js:1537
msgid "Includes variant stock"
msgstr ""
-#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1865
+#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880
msgid "Includes substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:962
+#: templates/js/translated/bom.js:985
msgid "Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:977
-msgid "Purchase Price Range"
-msgstr ""
-
-#: templates/js/translated/bom.js:984
-msgid "Purchase Price Average"
-msgstr ""
-
-#: templates/js/translated/bom.js:1033 templates/js/translated/bom.js:1153
+#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170
msgid "View BOM"
msgstr ""
-#: templates/js/translated/bom.js:1060
-msgid "Including On Order"
+#: templates/js/translated/bom.js:1046
+msgid "Purchase Price Range"
msgstr ""
-#: templates/js/translated/bom.js:1124
+#: templates/js/translated/bom.js:1053
+msgid "Purchase Price Average"
+msgstr ""
+
+#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863
+#: templates/js/translated/build.js:1947
+msgid "Consumable item"
+msgstr ""
+
+#: templates/js/translated/bom.js:1141
msgid "Validate BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1126
+#: templates/js/translated/bom.js:1143
msgid "This line has been validated"
msgstr ""
-#: templates/js/translated/bom.js:1128
+#: templates/js/translated/bom.js:1145
msgid "Edit substitute parts"
msgstr ""
-#: templates/js/translated/bom.js:1130 templates/js/translated/bom.js:1292
+#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1309
msgid "Edit BOM Item"
msgstr "Редактировать элемент BOM"
-#: templates/js/translated/bom.js:1132
+#: templates/js/translated/bom.js:1149
msgid "Delete BOM Item"
msgstr "Удалить элемент BOM"
-#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1650
+#: templates/js/translated/bom.js:1245 templates/js/translated/build.js:1666
msgid "No BOM items found"
msgstr "Элементы BOM не найдены"
-#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1789
+#: templates/js/translated/bom.js:1489 templates/js/translated/build.js:1805
msgid "Required Part"
msgstr ""
-#: templates/js/translated/bom.js:1498
+#: templates/js/translated/bom.js:1515
msgid "Inherited from parent BOM"
msgstr "Унаследовано от родительского BOM"
@@ -8207,256 +8227,260 @@ msgstr ""
msgid "There are incomplete outputs remaining for this build order"
msgstr ""
-#: templates/js/translated/build.js:217
+#: templates/js/translated/build.js:239
msgid "Build order is ready to be completed"
msgstr ""
-#: templates/js/translated/build.js:222
+#: templates/js/translated/build.js:247
+msgid "This build order cannot be completed as there are incomplete outputs"
+msgstr ""
+
+#: templates/js/translated/build.js:252
msgid "Build Order is incomplete"
msgstr ""
-#: templates/js/translated/build.js:254
+#: templates/js/translated/build.js:270
msgid "Complete Build Order"
msgstr ""
-#: templates/js/translated/build.js:295 templates/js/translated/stock.js:92
+#: templates/js/translated/build.js:311 templates/js/translated/stock.js:92
#: templates/js/translated/stock.js:214
msgid "Next available serial number"
msgstr ""
-#: templates/js/translated/build.js:297 templates/js/translated/stock.js:94
+#: templates/js/translated/build.js:313 templates/js/translated/stock.js:94
#: templates/js/translated/stock.js:216
msgid "Latest serial number"
msgstr ""
-#: templates/js/translated/build.js:306
+#: templates/js/translated/build.js:322
msgid "The Bill of Materials contains trackable parts"
msgstr "Спецификация содержит отслеживаемые детали"
-#: templates/js/translated/build.js:307
+#: templates/js/translated/build.js:323
msgid "Build outputs must be generated individually"
msgstr ""
-#: templates/js/translated/build.js:315
+#: templates/js/translated/build.js:331
msgid "Trackable parts can have serial numbers specified"
msgstr "Отслеживаемые детали могут иметь серийные номера"
-#: templates/js/translated/build.js:316
+#: templates/js/translated/build.js:332
msgid "Enter serial numbers to generate multiple single build outputs"
msgstr ""
-#: templates/js/translated/build.js:323
+#: templates/js/translated/build.js:339
msgid "Create Build Output"
msgstr ""
-#: templates/js/translated/build.js:354
+#: templates/js/translated/build.js:370
msgid "Allocate stock items to this build output"
msgstr ""
-#: templates/js/translated/build.js:365
+#: templates/js/translated/build.js:381
msgid "Unallocate stock from build output"
msgstr ""
-#: templates/js/translated/build.js:374
+#: templates/js/translated/build.js:390
msgid "Complete build output"
msgstr ""
-#: templates/js/translated/build.js:382
+#: templates/js/translated/build.js:398
msgid "Delete build output"
msgstr ""
-#: templates/js/translated/build.js:405
+#: templates/js/translated/build.js:421
msgid "Are you sure you wish to unallocate stock items from this build?"
msgstr ""
-#: templates/js/translated/build.js:423
+#: templates/js/translated/build.js:439
msgid "Unallocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:443 templates/js/translated/build.js:595
+#: templates/js/translated/build.js:459 templates/js/translated/build.js:611
msgid "Select Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:444 templates/js/translated/build.js:596
+#: templates/js/translated/build.js:460 templates/js/translated/build.js:612
msgid "At least one build output must be selected"
msgstr ""
-#: templates/js/translated/build.js:498 templates/js/translated/build.js:650
+#: templates/js/translated/build.js:514 templates/js/translated/build.js:666
msgid "Output"
msgstr ""
-#: templates/js/translated/build.js:516
+#: templates/js/translated/build.js:532
msgid "Complete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:663
+#: templates/js/translated/build.js:679
msgid "Delete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:753
+#: templates/js/translated/build.js:769
msgid "No build order allocations found"
msgstr ""
-#: templates/js/translated/build.js:790
+#: templates/js/translated/build.js:806
msgid "Location not specified"
msgstr ""
-#: templates/js/translated/build.js:1169
+#: templates/js/translated/build.js:1185
msgid "No active build outputs found"
msgstr ""
-#: templates/js/translated/build.js:1238
+#: templates/js/translated/build.js:1254
msgid "Allocated Stock"
msgstr ""
-#: templates/js/translated/build.js:1245
+#: templates/js/translated/build.js:1261
msgid "No tracked BOM items for this build"
msgstr ""
-#: templates/js/translated/build.js:1267
+#: templates/js/translated/build.js:1283
msgid "Completed Tests"
msgstr ""
-#: templates/js/translated/build.js:1272
+#: templates/js/translated/build.js:1288
msgid "No required tests for this build"
msgstr ""
-#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2697
+#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727
#: templates/js/translated/order.js:3632
msgid "Edit stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1748 templates/js/translated/build.js:2698
+#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728
#: templates/js/translated/order.js:3633
msgid "Delete stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1766
+#: templates/js/translated/build.js:1782
msgid "Edit Allocation"
msgstr ""
-#: templates/js/translated/build.js:1776
+#: templates/js/translated/build.js:1792
msgid "Remove Allocation"
msgstr ""
-#: templates/js/translated/build.js:1801
+#: templates/js/translated/build.js:1817
msgid "Substitute parts available"
msgstr ""
-#: templates/js/translated/build.js:1818
+#: templates/js/translated/build.js:1834
msgid "Quantity Per"
msgstr ""
-#: templates/js/translated/build.js:1847 templates/js/translated/order.js:3939
+#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939
msgid "Insufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1849 templates/js/translated/order.js:3937
+#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937
msgid "Sufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1882 templates/js/translated/build.js:2127
-#: templates/js/translated/build.js:2693 templates/js/translated/order.js:3951
+#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157
+#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1930 templates/js/translated/order.js:4031
+#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031
msgid "Build stock"
msgstr ""
-#: templates/js/translated/build.js:1934 templates/stock_table.html:50
+#: templates/js/translated/build.js:1959 templates/stock_table.html:50
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1937 templates/js/translated/order.js:4024
+#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024
msgid "Allocate stock"
msgstr ""
-#: templates/js/translated/build.js:1976 templates/js/translated/label.js:172
+#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172
#: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1977 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2026 templates/js/translated/order.js:3108
+#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108
msgid "Specify stock allocation quantity"
msgstr ""
-#: templates/js/translated/build.js:2100
+#: templates/js/translated/build.js:2130
msgid "All Parts Allocated"
msgstr ""
-#: templates/js/translated/build.js:2101
+#: templates/js/translated/build.js:2131
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2115 templates/js/translated/order.js:3174
+#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
-#: templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2173
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2154 templates/js/translated/order.js:3271
+#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2226 templates/js/translated/order.js:3348
+#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348
msgid "No matching stock items"
msgstr ""
-#: templates/js/translated/build.js:2323
+#: templates/js/translated/build.js:2353
msgid "Automatic Stock Allocation"
msgstr ""
-#: templates/js/translated/build.js:2324
+#: templates/js/translated/build.js:2354
msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines"
msgstr ""
-#: templates/js/translated/build.js:2326
+#: templates/js/translated/build.js:2356
msgid "If a location is specifed, stock will only be allocated from that location"
msgstr ""
-#: templates/js/translated/build.js:2327
+#: templates/js/translated/build.js:2357
msgid "If stock is considered interchangeable, it will be allocated from the first location it is found"
msgstr ""
-#: templates/js/translated/build.js:2328
+#: templates/js/translated/build.js:2358
msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found"
msgstr ""
-#: templates/js/translated/build.js:2349
+#: templates/js/translated/build.js:2379
msgid "Allocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:2455
+#: templates/js/translated/build.js:2485
msgid "No builds matching query"
msgstr ""
-#: templates/js/translated/build.js:2490 templates/js/translated/part.js:1422
-#: templates/js/translated/part.js:1954 templates/js/translated/stock.js:1686
+#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421
+#: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686
#: templates/js/translated/stock.js:2384
msgid "Select"
msgstr ""
-#: templates/js/translated/build.js:2504
+#: templates/js/translated/build.js:2534
msgid "Build order is overdue"
msgstr ""
-#: templates/js/translated/build.js:2532
+#: templates/js/translated/build.js:2562
msgid "Progress"
msgstr ""
-#: templates/js/translated/build.js:2568 templates/js/translated/stock.js:2651
+#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2651
msgid "No user information"
msgstr ""
-#: templates/js/translated/build.js:2674
+#: templates/js/translated/build.js:2704
msgid "No parts allocated for"
msgstr ""
@@ -8644,23 +8668,23 @@ msgstr "Форма содержит ошибки"
msgid "No results found"
msgstr "Не найдено"
-#: templates/js/translated/forms.js:1922 templates/search.html:29
+#: templates/js/translated/forms.js:1923 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2175
+#: templates/js/translated/forms.js:2176
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2653
+#: templates/js/translated/forms.js:2654
msgid "Select Columns"
msgstr ""
@@ -8672,7 +8696,7 @@ msgstr ""
msgid "NO"
msgstr ""
-#: templates/js/translated/helpers.js:362
+#: templates/js/translated/helpers.js:363
msgid "Notes updated"
msgstr ""
@@ -9091,7 +9115,7 @@ msgstr ""
#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2503
#: templates/js/translated/order.js:3842 templates/js/translated/order.js:4350
-#: templates/js/translated/part.js:2196 templates/js/translated/part.js:2794
+#: templates/js/translated/part.js:2195 templates/js/translated/part.js:2793
msgid "Unit Price"
msgstr ""
@@ -9446,8 +9470,8 @@ msgstr ""
msgid "Copy Bill of Materials"
msgstr ""
-#: templates/js/translated/part.js:584 templates/js/translated/part.js:1520
-#: templates/js/translated/table_filters.js:468
+#: templates/js/translated/part.js:584 templates/js/translated/part.js:1519
+#: templates/js/translated/table_filters.js:476
msgid "Low stock"
msgstr ""
@@ -9483,140 +9507,140 @@ msgstr ""
msgid "Delete Part Relationship"
msgstr ""
-#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1608
+#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1607
msgid "No parts found"
msgstr "Детали не найдены"
-#: templates/js/translated/part.js:1487
+#: templates/js/translated/part.js:1486
msgid "No category"
msgstr "Нет категории"
-#: templates/js/translated/part.js:1518
+#: templates/js/translated/part.js:1517
msgid "No stock"
msgstr ""
-#: templates/js/translated/part.js:1542
+#: templates/js/translated/part.js:1541
msgid "Allocated to build orders"
msgstr ""
-#: templates/js/translated/part.js:1546
+#: templates/js/translated/part.js:1545
msgid "Allocated to sales orders"
msgstr ""
-#: templates/js/translated/part.js:1632 templates/js/translated/part.js:1875
+#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1874
#: templates/js/translated/stock.js:2345
msgid "Display as list"
msgstr "Список"
-#: templates/js/translated/part.js:1648
+#: templates/js/translated/part.js:1647
msgid "Display as grid"
msgstr "Таблица"
-#: templates/js/translated/part.js:1714
+#: templates/js/translated/part.js:1713
msgid "Set the part category for the selected parts"
msgstr ""
-#: templates/js/translated/part.js:1719
+#: templates/js/translated/part.js:1718
msgid "Set Part Category"
msgstr "Укажите категорию"
-#: templates/js/translated/part.js:1724
+#: templates/js/translated/part.js:1723
msgid "Select Part Category"
msgstr ""
-#: templates/js/translated/part.js:1737
+#: templates/js/translated/part.js:1736
msgid "Category is required"
msgstr ""
-#: templates/js/translated/part.js:1894 templates/js/translated/stock.js:2364
+#: templates/js/translated/part.js:1893 templates/js/translated/stock.js:2364
msgid "Display as tree"
msgstr "Дерево"
-#: templates/js/translated/part.js:1973
+#: templates/js/translated/part.js:1972
msgid "Load Subcategories"
msgstr ""
-#: templates/js/translated/part.js:1989
+#: templates/js/translated/part.js:1988
msgid "Subscribed category"
msgstr ""
-#: templates/js/translated/part.js:2053
+#: templates/js/translated/part.js:2052
msgid "No test templates matching query"
msgstr ""
-#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1299
+#: templates/js/translated/part.js:2103 templates/js/translated/stock.js:1299
msgid "Edit test result"
msgstr ""
-#: templates/js/translated/part.js:2105 templates/js/translated/stock.js:1300
+#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1300
#: templates/js/translated/stock.js:1560
msgid "Delete test result"
msgstr ""
-#: templates/js/translated/part.js:2111
+#: templates/js/translated/part.js:2110
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/translated/part.js:2133
+#: templates/js/translated/part.js:2132
msgid "Edit Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2147
+#: templates/js/translated/part.js:2146
msgid "Delete Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2172
+#: templates/js/translated/part.js:2171
#, python-brace-format
msgid "No ${human_name} information found"
msgstr ""
-#: templates/js/translated/part.js:2229
+#: templates/js/translated/part.js:2228
#, python-brace-format
msgid "Edit ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2230
+#: templates/js/translated/part.js:2229
#, python-brace-format
msgid "Delete ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2395 templates/js/translated/part.js:2396
+#: templates/js/translated/part.js:2394 templates/js/translated/part.js:2395
msgid "No date specified"
msgstr ""
-#: templates/js/translated/part.js:2398
+#: templates/js/translated/part.js:2397
msgid "Specified date is in the past"
msgstr ""
-#: templates/js/translated/part.js:2404
+#: templates/js/translated/part.js:2403
msgid "Speculative"
msgstr ""
-#: templates/js/translated/part.js:2454
+#: templates/js/translated/part.js:2453
msgid "No scheduling information available for this part"
msgstr ""
-#: templates/js/translated/part.js:2460
+#: templates/js/translated/part.js:2459
msgid "Error fetching scheduling information for this part"
msgstr ""
-#: templates/js/translated/part.js:2556
+#: templates/js/translated/part.js:2555
msgid "Scheduled Stock Quantities"
msgstr ""
-#: templates/js/translated/part.js:2572
+#: templates/js/translated/part.js:2571
msgid "Maximum Quantity"
msgstr ""
-#: templates/js/translated/part.js:2617
+#: templates/js/translated/part.js:2616
msgid "Minimum Stock Level"
msgstr ""
-#: templates/js/translated/part.js:2718
+#: templates/js/translated/part.js:2717
msgid "Single Price"
msgstr ""
-#: templates/js/translated/part.js:2737
+#: templates/js/translated/part.js:2736
msgid "Single Price Difference"
msgstr ""
@@ -9979,7 +10003,7 @@ msgid "Stock item is destroyed"
msgstr ""
#: templates/js/translated/stock.js:1816
-#: templates/js/translated/table_filters.js:196
+#: templates/js/translated/table_filters.js:204
msgid "Depleted"
msgstr ""
@@ -10103,215 +10127,215 @@ msgstr ""
msgid "Allow Variant Stock"
msgstr ""
-#: templates/js/translated/table_filters.js:118
-#: templates/js/translated/table_filters.js:191
+#: templates/js/translated/table_filters.js:126
+#: templates/js/translated/table_filters.js:199
msgid "Include sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:119
+#: templates/js/translated/table_filters.js:127
msgid "Include locations"
msgstr ""
-#: templates/js/translated/table_filters.js:129
-#: templates/js/translated/table_filters.js:130
-#: templates/js/translated/table_filters.js:437
+#: templates/js/translated/table_filters.js:137
+#: templates/js/translated/table_filters.js:138
+#: templates/js/translated/table_filters.js:445
msgid "Include subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:134
-#: templates/js/translated/table_filters.js:480
+#: templates/js/translated/table_filters.js:142
+#: templates/js/translated/table_filters.js:488
msgid "Subscribed"
msgstr ""
-#: templates/js/translated/table_filters.js:144
-#: templates/js/translated/table_filters.js:226
+#: templates/js/translated/table_filters.js:152
+#: templates/js/translated/table_filters.js:234
msgid "Is Serialized"
msgstr ""
-#: templates/js/translated/table_filters.js:147
-#: templates/js/translated/table_filters.js:233
+#: templates/js/translated/table_filters.js:155
+#: templates/js/translated/table_filters.js:241
msgid "Serial number GTE"
msgstr ""
-#: templates/js/translated/table_filters.js:148
-#: templates/js/translated/table_filters.js:234
+#: templates/js/translated/table_filters.js:156
+#: templates/js/translated/table_filters.js:242
msgid "Serial number greater than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:151
-#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:159
+#: templates/js/translated/table_filters.js:245
msgid "Serial number LTE"
msgstr ""
-#: templates/js/translated/table_filters.js:152
-#: templates/js/translated/table_filters.js:238
+#: templates/js/translated/table_filters.js:160
+#: templates/js/translated/table_filters.js:246
msgid "Serial number less than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:155
-#: templates/js/translated/table_filters.js:156
-#: templates/js/translated/table_filters.js:229
-#: templates/js/translated/table_filters.js:230
+#: templates/js/translated/table_filters.js:163
+#: templates/js/translated/table_filters.js:164
+#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:238
msgid "Serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:160
-#: templates/js/translated/table_filters.js:251
+#: templates/js/translated/table_filters.js:168
+#: templates/js/translated/table_filters.js:259
msgid "Batch code"
msgstr "Код партии"
-#: templates/js/translated/table_filters.js:171
-#: templates/js/translated/table_filters.js:409
+#: templates/js/translated/table_filters.js:179
+#: templates/js/translated/table_filters.js:417
msgid "Active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:172
+#: templates/js/translated/table_filters.js:180
msgid "Show stock for active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:177
+#: templates/js/translated/table_filters.js:185
msgid "Part is an assembly"
msgstr ""
-#: templates/js/translated/table_filters.js:181
+#: templates/js/translated/table_filters.js:189
msgid "Is allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:182
+#: templates/js/translated/table_filters.js:190
msgid "Item has been allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:187
+#: templates/js/translated/table_filters.js:195
msgid "Stock is available for use"
msgstr ""
-#: templates/js/translated/table_filters.js:192
+#: templates/js/translated/table_filters.js:200
msgid "Include stock in sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:197
+#: templates/js/translated/table_filters.js:205
msgid "Show stock items which are depleted"
msgstr ""
-#: templates/js/translated/table_filters.js:202
+#: templates/js/translated/table_filters.js:210
msgid "Show items which are in stock"
msgstr ""
-#: templates/js/translated/table_filters.js:206
+#: templates/js/translated/table_filters.js:214
msgid "In Production"
msgstr ""
-#: templates/js/translated/table_filters.js:207
+#: templates/js/translated/table_filters.js:215
msgid "Show items which are in production"
msgstr ""
-#: templates/js/translated/table_filters.js:211
+#: templates/js/translated/table_filters.js:219
msgid "Include Variants"
msgstr ""
-#: templates/js/translated/table_filters.js:212
+#: templates/js/translated/table_filters.js:220
msgid "Include stock items for variant parts"
msgstr ""
-#: templates/js/translated/table_filters.js:216
+#: templates/js/translated/table_filters.js:224
msgid "Installed"
msgstr ""
-#: templates/js/translated/table_filters.js:217
+#: templates/js/translated/table_filters.js:225
msgid "Show stock items which are installed in another item"
msgstr ""
-#: templates/js/translated/table_filters.js:222
+#: templates/js/translated/table_filters.js:230
msgid "Show items which have been assigned to a customer"
msgstr ""
-#: templates/js/translated/table_filters.js:242
-#: templates/js/translated/table_filters.js:243
+#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:251
msgid "Stock status"
msgstr ""
-#: templates/js/translated/table_filters.js:246
+#: templates/js/translated/table_filters.js:254
msgid "Has batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:254
+#: templates/js/translated/table_filters.js:262
msgid "Tracked"
msgstr ""
-#: templates/js/translated/table_filters.js:255
+#: templates/js/translated/table_filters.js:263
msgid "Stock item is tracked by either batch code or serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:260
+#: templates/js/translated/table_filters.js:268
msgid "Has purchase price"
msgstr ""
-#: templates/js/translated/table_filters.js:261
+#: templates/js/translated/table_filters.js:269
msgid "Show stock items which have a purchase price set"
msgstr ""
-#: templates/js/translated/table_filters.js:270
+#: templates/js/translated/table_filters.js:278
msgid "Show stock items which have expired"
msgstr ""
-#: templates/js/translated/table_filters.js:276
+#: templates/js/translated/table_filters.js:284
msgid "Show stock which is close to expiring"
msgstr ""
-#: templates/js/translated/table_filters.js:288
+#: templates/js/translated/table_filters.js:296
msgid "Test Passed"
msgstr ""
-#: templates/js/translated/table_filters.js:292
+#: templates/js/translated/table_filters.js:300
msgid "Include Installed Items"
msgstr ""
-#: templates/js/translated/table_filters.js:311
+#: templates/js/translated/table_filters.js:319
msgid "Build status"
msgstr "Статус сборки"
-#: templates/js/translated/table_filters.js:324
-#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:332
+#: templates/js/translated/table_filters.js:373
msgid "Assigned to me"
msgstr ""
-#: templates/js/translated/table_filters.js:341
-#: templates/js/translated/table_filters.js:352
-#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:349
+#: templates/js/translated/table_filters.js:360
+#: templates/js/translated/table_filters.js:390
msgid "Order status"
msgstr ""
-#: templates/js/translated/table_filters.js:357
-#: templates/js/translated/table_filters.js:374
-#: templates/js/translated/table_filters.js:387
+#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:395
msgid "Outstanding"
msgstr ""
-#: templates/js/translated/table_filters.js:438
+#: templates/js/translated/table_filters.js:446
msgid "Include parts in subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:443
+#: templates/js/translated/table_filters.js:451
msgid "Show active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:451
+#: templates/js/translated/table_filters.js:459
msgid "Available stock"
msgstr ""
-#: templates/js/translated/table_filters.js:459
+#: templates/js/translated/table_filters.js:467
msgid "Has IPN"
msgstr ""
-#: templates/js/translated/table_filters.js:460
+#: templates/js/translated/table_filters.js:468
msgid "Part has internal part number"
msgstr ""
-#: templates/js/translated/table_filters.js:464
+#: templates/js/translated/table_filters.js:472
msgid "In stock"
msgstr ""
-#: templates/js/translated/table_filters.js:472
+#: templates/js/translated/table_filters.js:480
msgid "Purchasable"
msgstr ""
diff --git a/InvenTree/locale/sv/LC_MESSAGES/django.po b/InvenTree/locale/sv/LC_MESSAGES/django.po
index 0378de4352..25581bb240 100644
--- a/InvenTree/locale/sv/LC_MESSAGES/django.po
+++ b/InvenTree/locale/sv/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-20 09:03+0000\n"
-"PO-Revision-Date: 2022-09-21 00:45\n"
+"POT-Creation-Date: 2022-09-24 13:47+0000\n"
+"PO-Revision-Date: 2022-09-25 01:07\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
@@ -36,11 +36,11 @@ msgstr "Ange datum"
#: order/templates/order/so_sidebar.html:17
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:172
-#: stock/models.py:1947 stock/models.py:2055 stock/serializers.py:327
+#: stock/models.py:1941 stock/models.py:2049 stock/serializers.py:327
#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823
#: stock/serializers.py:922 stock/serializers.py:1054
#: stock/templates/stock/stock_sidebar.html:25
-#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1107
+#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1121
#: templates/js/translated/company.js:1022
#: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555
#: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004
@@ -168,117 +168,117 @@ msgstr "Antal unika serienummer ({s}) måste matcha antal ({q})"
msgid "Remove HTML tags from this value"
msgstr "Ta bort HTML-taggar från detta värde"
-#: InvenTree/models.py:236
+#: InvenTree/models.py:238
msgid "Improperly formatted pattern"
msgstr "Felaktigt formaterat mönster"
-#: InvenTree/models.py:243
+#: InvenTree/models.py:245
msgid "Unknown format key specified"
msgstr "Okänd formatnyckel angiven"
-#: InvenTree/models.py:249
+#: InvenTree/models.py:251
msgid "Missing required format key"
msgstr "Obligatorisk formatnyckel saknas"
-#: InvenTree/models.py:261
+#: InvenTree/models.py:263
msgid "Reference field cannot be empty"
msgstr "Textfältet kan inte lämnas tomt"
-#: InvenTree/models.py:268
+#: InvenTree/models.py:270
msgid "Reference must match required pattern"
msgstr "Referensen måste matcha obligatoriskt mönster"
-#: InvenTree/models.py:304
+#: InvenTree/models.py:306
msgid "Reference number is too large"
msgstr "Referensnumret är för stort"
-#: InvenTree/models.py:382
+#: InvenTree/models.py:384
msgid "Missing file"
msgstr "Saknad fil"
-#: InvenTree/models.py:383
+#: InvenTree/models.py:385
msgid "Missing external link"
msgstr "Extern länk saknas"
-#: InvenTree/models.py:395 stock/models.py:2049
+#: InvenTree/models.py:405 stock/models.py:2043
#: templates/js/translated/attachment.js:103
#: templates/js/translated/attachment.js:241
msgid "Attachment"
msgstr "Bilaga"
-#: InvenTree/models.py:396
+#: InvenTree/models.py:406
msgid "Select file to attach"
msgstr "Välj fil att bifoga"
-#: InvenTree/models.py:402 company/models.py:124 company/models.py:276
+#: InvenTree/models.py:412 company/models.py:124 company/models.py:276
#: company/models.py:511 order/models.py:84 order/models.py:1249
#: part/models.py:802 part/templates/part/part_scheduling.html:11
#: report/templates/report/inventree_build_order_base.html:164
#: templates/js/translated/company.js:691
#: templates/js/translated/company.js:1011
-#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1568
+#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567
msgid "Link"
msgstr "Länk"
-#: InvenTree/models.py:403 build/models.py:285 part/models.py:803
-#: stock/models.py:605
+#: InvenTree/models.py:413 build/models.py:285 part/models.py:803
+#: stock/models.py:604
msgid "Link to external URL"
msgstr "Länk till extern URL"
-#: InvenTree/models.py:406 templates/js/translated/attachment.js:104
+#: InvenTree/models.py:416 templates/js/translated/attachment.js:104
#: templates/js/translated/attachment.js:285
msgid "Comment"
msgstr "Kommentar"
-#: InvenTree/models.py:406
+#: InvenTree/models.py:416
msgid "File comment"
msgstr "Fil kommentar"
-#: InvenTree/models.py:412 InvenTree/models.py:413 common/models.py:1669
-#: common/models.py:1670 common/models.py:1893 common/models.py:1894
-#: common/models.py:2156 common/models.py:2157 part/models.py:2235
-#: part/models.py:2255 plugin/models.py:260 plugin/models.py:261
+#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679
+#: common/models.py:1680 common/models.py:1903 common/models.py:1904
+#: common/models.py:2166 common/models.py:2167 part/models.py:2240
+#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2645
msgid "User"
msgstr "Användare"
-#: InvenTree/models.py:416
+#: InvenTree/models.py:426
msgid "upload date"
msgstr "uppladdningsdatum"
-#: InvenTree/models.py:438
+#: InvenTree/models.py:448
msgid "Filename must not be empty"
msgstr "Filnamnet får inte vara tomt"
-#: InvenTree/models.py:447
+#: InvenTree/models.py:457
msgid "Invalid attachment directory"
msgstr "Ogiltig katalog för bilaga"
-#: InvenTree/models.py:457
+#: InvenTree/models.py:467
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "Filnamnet innehåller ogiltiga tecken '{c}'"
-#: InvenTree/models.py:460
+#: InvenTree/models.py:470
msgid "Filename missing extension"
msgstr "Filnamn saknar ändelse"
-#: InvenTree/models.py:467
+#: InvenTree/models.py:477
msgid "Attachment with this filename already exists"
msgstr "Det finns redan en bilaga med detta filnamn"
-#: InvenTree/models.py:474
+#: InvenTree/models.py:484
msgid "Error renaming file"
msgstr "Fel vid namnbyte av fil"
-#: InvenTree/models.py:510
+#: InvenTree/models.py:520
msgid "Invalid choice"
msgstr "Ogiltigt val"
-#: InvenTree/models.py:547 InvenTree/models.py:548 common/models.py:1879
+#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889
#: company/models.py:358 label/models.py:101 part/models.py:746
-#: part/models.py:2413 plugin/models.py:94 report/models.py:152
+#: part/models.py:2418 plugin/models.py:94 report/models.py:152
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin.html:134
@@ -288,16 +288,16 @@ msgstr "Ogiltigt val"
#: templates/js/translated/company.js:793
#: templates/js/translated/notification.js:71
#: templates/js/translated/part.js:686 templates/js/translated/part.js:838
-#: templates/js/translated/part.js:1961 templates/js/translated/stock.js:2390
+#: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2390
msgid "Name"
msgstr "Namn"
-#: InvenTree/models.py:554 build/models.py:163
+#: InvenTree/models.py:564 build/models.py:163
#: build/templates/build/detail.html:24 company/models.py:282
#: company/models.py:517 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
#: company/templates/company/supplier_part.html:108 label/models.py:108
-#: order/models.py:82 part/models.py:769 part/models.py:2425
+#: order/models.py:82 part/models.py:769 part/models.py:2430
#: part/templates/part/category.html:80 part/templates/part/part_base.html:172
#: part/templates/part/part_scheduling.html:12 report/models.py:165
#: report/models.py:507 report/models.py:551
@@ -305,60 +305,60 @@ msgstr "Namn"
#: stock/templates/stock/location.html:113
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/InvenTree/settings/settings.html:358
-#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:846
-#: templates/js/translated/build.js:2512 templates/js/translated/company.js:444
+#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862
+#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444
#: templates/js/translated/company.js:702
#: templates/js/translated/company.js:986 templates/js/translated/order.js:1988
#: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831
#: templates/js/translated/part.js:745 templates/js/translated/part.js:1187
-#: templates/js/translated/part.js:1463 templates/js/translated/part.js:1997
-#: templates/js/translated/part.js:2072 templates/js/translated/stock.js:1744
+#: templates/js/translated/part.js:1462 templates/js/translated/part.js:1996
+#: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1744
#: templates/js/translated/stock.js:2422 templates/js/translated/stock.js:2482
msgid "Description"
msgstr "Beskrivning"
-#: InvenTree/models.py:555
+#: InvenTree/models.py:565
msgid "Description (optional)"
msgstr "Beskrivning (valfritt)"
-#: InvenTree/models.py:563
+#: InvenTree/models.py:573
msgid "parent"
msgstr "överordnad"
-#: InvenTree/models.py:570 InvenTree/models.py:571
-#: templates/js/translated/part.js:2006 templates/js/translated/stock.js:2431
+#: InvenTree/models.py:580 InvenTree/models.py:581
+#: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2431
msgid "Path"
msgstr "Sökväg"
-#: InvenTree/models.py:672
+#: InvenTree/models.py:682
msgid "Barcode Data"
msgstr ""
-#: InvenTree/models.py:673
+#: InvenTree/models.py:683
msgid "Third party barcode data"
msgstr ""
-#: InvenTree/models.py:678 order/serializers.py:486
+#: InvenTree/models.py:688 order/serializers.py:486
msgid "Barcode Hash"
msgstr ""
-#: InvenTree/models.py:679
+#: InvenTree/models.py:689
msgid "Unique hash of barcode data"
msgstr ""
-#: InvenTree/models.py:724
+#: InvenTree/models.py:734
msgid "Existing barcode found"
msgstr ""
-#: InvenTree/models.py:777
+#: InvenTree/models.py:787
msgid "Server Error"
msgstr "Serverfel"
-#: InvenTree/models.py:778
+#: InvenTree/models.py:788
msgid "An error has been logged by the server."
msgstr "Ett fel har loggats av servern."
-#: InvenTree/serializers.py:55 part/models.py:2741
+#: InvenTree/serializers.py:55 part/models.py:2766
msgid "Must be a valid number"
msgstr "Måste vara ett giltigt nummer"
@@ -538,7 +538,7 @@ msgid "InvenTree system health checks failed"
msgstr "InvenTree systemhälsokontroll misslyckades"
#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140
-#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:334
+#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:342
msgid "Pending"
msgstr "Väntar"
@@ -660,7 +660,7 @@ msgstr "Sammanfogade lagerposter"
msgid "Converted to variant"
msgstr "Konverterad till variant"
-#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:221
+#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:229
msgid "Sent to customer"
msgstr "Skickat till kund"
@@ -755,7 +755,7 @@ msgstr "Ogiltigt val för överordnad bygge"
#: report/templates/report/inventree_build_order_base.html:105
#: templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
-#: templates/js/translated/build.js:764
+#: templates/js/translated/build.js:780
msgid "Build Order"
msgstr "Byggorder"
@@ -774,12 +774,12 @@ msgid "Build Order Reference"
msgstr "Byggorderreferens"
#: build/models.py:155 order/models.py:240 order/models.py:627
-#: order/models.py:908 part/models.py:2659
+#: order/models.py:908 part/models.py:2676
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
-#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:853
-#: templates/js/translated/build.js:1813 templates/js/translated/order.js:2251
+#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872
+#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251
#: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823
#: templates/js/translated/order.js:4331
msgid "Reference"
@@ -801,10 +801,10 @@ msgstr "Byggorder till vilken detta bygge är tilldelad"
#: build/models.py:180 build/templates/build/build_base.html:80
#: build/templates/build/detail.html:29 company/models.py:679
#: order/models.py:1005 order/models.py:1116 order/models.py:1117
-#: part/models.py:343 part/models.py:2181 part/models.py:2196
-#: part/models.py:2215 part/models.py:2233 part/models.py:2332
-#: part/models.py:2459 part/models.py:2549 part/models.py:2634
-#: part/models.py:2910 part/serializers.py:814
+#: part/models.py:343 part/models.py:2186 part/models.py:2201
+#: part/models.py:2220 part/models.py:2238 part/models.py:2337
+#: part/models.py:2464 part/models.py:2556 part/models.py:2641
+#: part/models.py:2935 part/serializers.py:828
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/upload_bom.html:52
@@ -816,10 +816,10 @@ msgstr "Byggorder till vilken detta bygge är tilldelad"
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:16
#: templates/email/overdue_build_order.html:16
-#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:552
-#: templates/js/translated/bom.js:689 templates/js/translated/bom.js:800
-#: templates/js/translated/build.js:1189 templates/js/translated/build.js:1682
-#: templates/js/translated/build.js:2126 templates/js/translated/build.js:2517
+#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:553
+#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816
+#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698
+#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547
#: templates/js/translated/company.js:301
#: templates/js/translated/company.js:531
#: templates/js/translated/company.js:643
@@ -828,7 +828,7 @@ msgstr "Byggorder till vilken detta bygge är tilldelad"
#: templates/js/translated/order.js:2205 templates/js/translated/order.js:3185
#: templates/js/translated/order.js:3581 templates/js/translated/order.js:3807
#: templates/js/translated/part.js:1172 templates/js/translated/part.js:1244
-#: templates/js/translated/part.js:1441 templates/js/translated/stock.js:586
+#: templates/js/translated/part.js:1440 templates/js/translated/stock.js:586
#: templates/js/translated/stock.js:751 templates/js/translated/stock.js:958
#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2508
#: templates/js/translated/stock.js:2703 templates/js/translated/stock.js:2837
@@ -847,8 +847,8 @@ msgstr "Försäljningsorderreferens"
msgid "SalesOrder to which this build is allocated"
msgstr "Försäljningsorder till vilken detta bygge allokeras"
-#: build/models.py:202 build/serializers.py:800
-#: templates/js/translated/build.js:2114 templates/js/translated/order.js:3173
+#: build/models.py:202 build/serializers.py:819
+#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173
msgid "Source Location"
msgstr "Källa Plats"
@@ -889,7 +889,7 @@ msgid "Build status code"
msgstr "Bygg statuskod"
#: build/models.py:240 build/serializers.py:225 order/serializers.py:464
-#: stock/models.py:609 templates/js/translated/order.js:1496
+#: stock/models.py:608 templates/js/translated/order.js:1496
msgid "Batch Code"
msgstr "Batchkod"
@@ -911,7 +911,7 @@ msgid "Target date for build completion. Build will be overdue after this date."
msgstr "Måldatum för färdigställande. Byggandet kommer att förfallas efter detta datum."
#: build/models.py:255 order/models.py:286
-#: templates/js/translated/build.js:2594
+#: templates/js/translated/build.js:2624
msgid "Completion Date"
msgstr "Slutförandedatum"
@@ -919,7 +919,7 @@ msgstr "Slutförandedatum"
msgid "completed by"
msgstr "slutfört av"
-#: build/models.py:269 templates/js/translated/build.js:2562
+#: build/models.py:269 templates/js/translated/build.js:2592
msgid "Issued by"
msgstr "Utfärdad av"
@@ -932,7 +932,7 @@ msgstr "Användare som utfärdade denna byggorder"
#: order/templates/order/order_base.html:185
#: order/templates/order/sales_order_base.html:183 part/models.py:942
#: report/templates/report/inventree_build_order_base.html:158
-#: templates/js/translated/build.js:2574 templates/js/translated/order.js:2022
+#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022
msgid "Responsible"
msgstr "Ansvarig"
@@ -943,7 +943,7 @@ msgstr "Användare som ansvarar för denna byggorder"
#: build/models.py:284 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:188
-#: part/templates/part/part_base.html:359 stock/models.py:603
+#: part/templates/part/part_base.html:359 stock/models.py:602
#: stock/templates/stock/item_base.html:203
msgid "External Link"
msgstr "Extern länk"
@@ -973,48 +973,48 @@ msgstr "Byggutgång är redan slutförd"
msgid "Build output does not match Build Order"
msgstr "Byggutgång matchar inte bygg order"
-#: build/models.py:1158
+#: build/models.py:1167
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "Byggobjekt måste ange en byggutgång, eftersom huvuddelen är markerad som spårbar"
-#: build/models.py:1167
+#: build/models.py:1176
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo ({a})"
-#: build/models.py:1177 order/models.py:1383
+#: build/models.py:1186 order/models.py:1383
msgid "Stock item is over-allocated"
msgstr "Lagerposten är överallokerad"
-#: build/models.py:1183 order/models.py:1386
+#: build/models.py:1192 order/models.py:1386
msgid "Allocation quantity must be greater than zero"
msgstr "Allokeringsmängden måste vara större än noll"
-#: build/models.py:1189
+#: build/models.py:1198
msgid "Quantity must be 1 for serialized stock"
msgstr "Antal måste vara 1 för serialiserat lager"
-#: build/models.py:1246
+#: build/models.py:1255
msgid "Selected stock item not found in BOM"
msgstr "Vald lagervara hittades inte i BOM"
-#: build/models.py:1315 stock/templates/stock/item_base.html:175
-#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2496
+#: build/models.py:1324 stock/templates/stock/item_base.html:175
+#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526
#: templates/navbar.html:38
msgid "Build"
msgstr "Bygg"
-#: build/models.py:1316
+#: build/models.py:1325
msgid "Build to allocate parts"
msgstr "Bygg för att allokera delar"
-#: build/models.py:1332 build/serializers.py:645 order/serializers.py:1035
+#: build/models.py:1341 build/serializers.py:660 order/serializers.py:1035
#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754
#: stock/serializers.py:880 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:197
-#: templates/js/translated/build.js:774 templates/js/translated/build.js:779
-#: templates/js/translated/build.js:2128 templates/js/translated/build.js:2679
+#: templates/js/translated/build.js:790 templates/js/translated/build.js:795
+#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709
#: templates/js/translated/order.js:107 templates/js/translated/order.js:3186
#: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493
#: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680
@@ -1023,18 +1023,18 @@ msgstr "Bygg för att allokera delar"
msgid "Stock Item"
msgstr "Artikel i lager"
-#: build/models.py:1333
+#: build/models.py:1342
msgid "Source stock item"
msgstr "Källa lagervara"
-#: build/models.py:1345 build/serializers.py:193
+#: build/models.py:1354 build/serializers.py:193
#: build/templates/build/build_base.html:85
-#: build/templates/build/detail.html:34 common/models.py:1701
+#: build/templates/build/detail.html:34 common/models.py:1711
#: company/templates/company/supplier_part.html:341 order/models.py:901
#: order/models.py:1427 order/serializers.py:1209
#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40
-#: part/models.py:2650 part/templates/part/detail.html:951
-#: part/templates/part/detail.html:1037
+#: part/models.py:2657 part/templates/part/detail.html:950
+#: part/templates/part/detail.html:1036
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
#: report/templates/report/inventree_build_order_base.html:113
@@ -1045,39 +1045,39 @@ msgstr "Källa lagervara"
#: stock/serializers.py:291 stock/templates/stock/item_base.html:290
#: stock/templates/stock/item_base.html:298
#: templates/email/build_order_completed.html:18
-#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:691
-#: templates/js/translated/bom.js:861 templates/js/translated/build.js:458
-#: templates/js/translated/build.js:610 templates/js/translated/build.js:801
-#: templates/js/translated/build.js:1211 templates/js/translated/build.js:1708
-#: templates/js/translated/build.js:2129
+#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:692
+#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474
+#: templates/js/translated/build.js:626 templates/js/translated/build.js:817
+#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724
+#: templates/js/translated/build.js:2159
#: templates/js/translated/model_renderers.js:120
#: templates/js/translated/order.js:123 templates/js/translated/order.js:1137
#: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490
#: templates/js/translated/order.js:3187 templates/js/translated/order.js:3507
#: templates/js/translated/order.js:3594 templates/js/translated/order.js:3686
#: templates/js/translated/order.js:3829 templates/js/translated/order.js:4337
-#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2217
-#: templates/js/translated/part.js:2686 templates/js/translated/part.js:2727
-#: templates/js/translated/part.js:2805 templates/js/translated/stock.js:458
+#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2216
+#: templates/js/translated/part.js:2685 templates/js/translated/part.js:2726
+#: templates/js/translated/part.js:2804 templates/js/translated/stock.js:458
#: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782
#: templates/js/translated/stock.js:2630 templates/js/translated/stock.js:2715
msgid "Quantity"
msgstr "Antal"
-#: build/models.py:1346
+#: build/models.py:1355
msgid "Stock quantity to allocate to build"
msgstr "Lagersaldo att allokera för att bygga"
-#: build/models.py:1354
+#: build/models.py:1363
msgid "Install into"
msgstr "Installera till"
-#: build/models.py:1355
+#: build/models.py:1364
msgid "Destination stock item"
msgstr "Destination lagervara"
-#: build/serializers.py:138 build/serializers.py:674
-#: templates/js/translated/build.js:1199
+#: build/serializers.py:138 build/serializers.py:689
+#: templates/js/translated/build.js:1215
msgid "Build Output"
msgstr "Bygg utdata"
@@ -1101,9 +1101,9 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:208 build/serializers.py:665 order/models.py:318
-#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:545
-#: part/serializers.py:977 stock/models.py:463 stock/models.py:1198
+#: build/serializers.py:208 build/serializers.py:680 order/models.py:318
+#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558
+#: part/serializers.py:991 stock/models.py:462 stock/models.py:1192
#: stock/serializers.py:300
msgid "Quantity must be greater than zero"
msgstr ""
@@ -1147,8 +1147,8 @@ msgstr ""
#: stock/serializers.py:915 stock/serializers.py:1148
#: stock/templates/stock/item_base.html:388
#: templates/js/translated/barcode.js:431
-#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:786
-#: templates/js/translated/build.js:1720 templates/js/translated/order.js:1534
+#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:802
+#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534
#: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605
#: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694
#: templates/js/translated/part.js:181 templates/js/translated/stock.js:588
@@ -1164,7 +1164,7 @@ msgstr ""
#: build/serializers.py:373 build/templates/build/build_base.html:145
#: build/templates/build/detail.html:62 order/models.py:646
#: order/serializers.py:482 stock/templates/stock/item_base.html:421
-#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2546
+#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2576
#: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992
#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1827
#: templates/js/translated/stock.js:2599 templates/js/translated/stock.js:2731
@@ -1203,113 +1203,113 @@ msgstr ""
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:494
+#: build/serializers.py:509
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:496
+#: build/serializers.py:511
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:506
+#: build/serializers.py:521
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:511
+#: build/serializers.py:526
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:512
+#: build/serializers.py:527
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:522 templates/js/translated/build.js:227
+#: build/serializers.py:537 templates/js/translated/build.js:258
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:527 order/serializers.py:208 order/serializers.py:1103
+#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103
msgid "Accept Incomplete"
msgstr "Acceptera ofullständig"
-#: build/serializers.py:528
+#: build/serializers.py:543
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:538 templates/js/translated/build.js:231
+#: build/serializers.py:553 templates/js/translated/build.js:262
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:547
+#: build/serializers.py:562 templates/js/translated/build.js:246
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:577 build/serializers.py:622 part/models.py:2768
-#: part/models.py:2902
+#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793
+#: part/models.py:2927
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:587
+#: build/serializers.py:602
msgid "Build output"
msgstr ""
-#: build/serializers.py:595
+#: build/serializers.py:610
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:636
+#: build/serializers.py:651
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:651 stock/serializers.py:767
+#: build/serializers.py:666 stock/serializers.py:767
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:709 order/serializers.py:1093
+#: build/serializers.py:724 order/serializers.py:1093
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:715
+#: build/serializers.py:730
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:722
+#: build/serializers.py:737
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:727
+#: build/serializers.py:742
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:750 order/serializers.py:1373
+#: build/serializers.py:765 order/serializers.py:1373
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:801
+#: build/serializers.py:820
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:809
+#: build/serializers.py:828
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:810
+#: build/serializers.py:829
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:815
+#: build/serializers.py:834
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:816
+#: build/serializers.py:835
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:821
+#: build/serializers.py:840
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:822
+#: build/serializers.py:841
msgid "Allow allocation of substitute parts"
msgstr ""
@@ -1400,7 +1400,7 @@ msgstr ""
#: order/templates/order/order_base.html:171
#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:125
-#: templates/js/translated/build.js:2586 templates/js/translated/order.js:2009
+#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009
#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852
#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051
msgid "Target Date"
@@ -1415,16 +1415,16 @@ msgstr ""
#: build/templates/build/build_base.html:204
#: order/templates/order/order_base.html:107
#: order/templates/order/sales_order_base.html:94
-#: templates/js/translated/table_filters.js:320
-#: templates/js/translated/table_filters.js:361
-#: templates/js/translated/table_filters.js:391
+#: templates/js/translated/table_filters.js:328
+#: templates/js/translated/table_filters.js:369
+#: templates/js/translated/table_filters.js:399
msgid "Overdue"
msgstr "Försenad"
#: build/templates/build/build_base.html:166
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
#: order/templates/order/sales_order_base.html:171
-#: templates/js/translated/table_filters.js:400
+#: templates/js/translated/table_filters.js:408
msgid "Completed"
msgstr "Slutförd"
@@ -1447,7 +1447,7 @@ msgstr "Försäljningsorder"
msgid "Issued By"
msgstr "Utfärdad av"
-#: build/templates/build/build_base.html:256
+#: build/templates/build/build_base.html:252
msgid "Delete Build Order"
msgstr ""
@@ -1478,19 +1478,19 @@ msgstr ""
#: build/templates/build/detail.html:80
#: stock/templates/stock/item_base.html:168
-#: templates/js/translated/build.js:1215
+#: templates/js/translated/build.js:1231
#: templates/js/translated/model_renderers.js:124
#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1841
#: templates/js/translated/stock.js:2738
-#: templates/js/translated/table_filters.js:159
-#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:167
+#: templates/js/translated/table_filters.js:258
msgid "Batch"
msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:158
#: order/templates/order/sales_order_base.html:158
-#: templates/js/translated/build.js:2554
+#: templates/js/translated/build.js:2584
msgid "Created"
msgstr "Skapad"
@@ -1510,7 +1510,7 @@ msgstr ""
msgid "Allocate Stock to Build"
msgstr ""
-#: build/templates/build/detail.html:176 templates/js/translated/build.js:1942
+#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967
msgid "Unallocate stock"
msgstr ""
@@ -1876,9 +1876,9 @@ msgstr ""
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:951 part/models.py:2461 report/models.py:158
+#: common/models.py:951 part/models.py:2466 report/models.py:158
#: templates/js/translated/table_filters.js:38
-#: templates/js/translated/table_filters.js:484
+#: templates/js/translated/table_filters.js:492
msgid "Template"
msgstr ""
@@ -1886,9 +1886,9 @@ msgstr ""
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1454
-#: templates/js/translated/table_filters.js:176
-#: templates/js/translated/table_filters.js:447
+#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1471
+#: templates/js/translated/table_filters.js:184
+#: templates/js/translated/table_filters.js:455
msgid "Assembly"
msgstr ""
@@ -1897,7 +1897,7 @@ msgid "Parts can be assembled from other components by default"
msgstr ""
#: common/models.py:965 part/models.py:900
-#: templates/js/translated/table_filters.js:455
+#: templates/js/translated/table_filters.js:463
msgid "Component"
msgstr ""
@@ -1914,7 +1914,7 @@ msgid "Parts are purchaseable by default"
msgstr ""
#: common/models.py:979 part/models.py:916
-#: templates/js/translated/table_filters.js:476
+#: templates/js/translated/table_filters.js:484
msgid "Salable"
msgstr ""
@@ -1924,8 +1924,8 @@ msgstr ""
#: common/models.py:986 part/models.py:906
#: templates/js/translated/table_filters.js:46
-#: templates/js/translated/table_filters.js:108
-#: templates/js/translated/table_filters.js:488
+#: templates/js/translated/table_filters.js:116
+#: templates/js/translated/table_filters.js:496
msgid "Trackable"
msgstr ""
@@ -1936,7 +1936,7 @@ msgstr ""
#: common/models.py:993 part/models.py:926
#: part/templates/part/part_base.html:156
#: templates/js/translated/table_filters.js:42
-#: templates/js/translated/table_filters.js:492
+#: templates/js/translated/table_filters.js:500
msgid "Virtual"
msgstr "Virtuell"
@@ -2300,7 +2300,7 @@ msgstr ""
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1344 common/models.py:1662
+#: common/models.py:1344 common/models.py:1672
msgid "Settings key (must be unique - case insensitive"
msgstr ""
@@ -2616,101 +2616,109 @@ msgstr ""
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1702
+#: common/models.py:1647
+msgid "Table String Length"
+msgstr ""
+
+#: common/models.py:1648
+msgid "Maximimum length limit for strings displayed in table views"
+msgstr ""
+
+#: common/models.py:1712
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1709 company/serializers.py:372
+#: common/models.py:1719 company/serializers.py:372
#: company/templates/company/supplier_part.html:346 order/models.py:942
-#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2222
+#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221
msgid "Price"
msgstr ""
-#: common/models.py:1710
+#: common/models.py:1720
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1870 common/models.py:2048
+#: common/models.py:1880 common/models.py:2058
msgid "Endpoint"
msgstr ""
-#: common/models.py:1871
+#: common/models.py:1881
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1890
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1885 part/models.py:921 plugin/models.py:100
+#: common/models.py:1895 part/models.py:921 plugin/models.py:100
#: templates/js/translated/table_filters.js:34
-#: templates/js/translated/table_filters.js:104
-#: templates/js/translated/table_filters.js:316
-#: templates/js/translated/table_filters.js:442
+#: templates/js/translated/table_filters.js:112
+#: templates/js/translated/table_filters.js:324
+#: templates/js/translated/table_filters.js:450
msgid "Active"
msgstr ""
-#: common/models.py:1886
+#: common/models.py:1896
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1900
+#: common/models.py:1910
msgid "Token"
msgstr ""
-#: common/models.py:1901
+#: common/models.py:1911
msgid "Token for access"
msgstr ""
-#: common/models.py:1908
+#: common/models.py:1918
msgid "Secret"
msgstr ""
-#: common/models.py:1909
+#: common/models.py:1919
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:2015
+#: common/models.py:2025
msgid "Message ID"
msgstr ""
-#: common/models.py:2016
+#: common/models.py:2026
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:2024
+#: common/models.py:2034
msgid "Host"
msgstr ""
-#: common/models.py:2025
+#: common/models.py:2035
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:2032
+#: common/models.py:2042
msgid "Header"
msgstr ""
-#: common/models.py:2033
+#: common/models.py:2043
msgid "Header of this message"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2049
msgid "Body"
msgstr ""
-#: common/models.py:2040
+#: common/models.py:2050
msgid "Body of this message"
msgstr ""
-#: common/models.py:2049
+#: common/models.py:2059
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:2054
+#: common/models.py:2064
msgid "Worked on"
msgstr ""
-#: common/models.py:2055
+#: common/models.py:2065
msgid "Was the work on this message finished?"
msgstr ""
@@ -2859,9 +2867,9 @@ msgstr ""
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:248 company/models.py:482 stock/models.py:545
+#: company/models.py:248 company/models.py:482 stock/models.py:544
#: stock/serializers.py:85 stock/templates/stock/item_base.html:143
-#: templates/js/translated/bom.js:542
+#: templates/js/translated/bom.js:543
msgid "Base Part"
msgstr ""
@@ -2877,7 +2885,7 @@ msgstr ""
#: templates/js/translated/company.js:533
#: templates/js/translated/company.js:668
#: templates/js/translated/company.js:956 templates/js/translated/part.js:236
-#: templates/js/translated/table_filters.js:419
+#: templates/js/translated/table_filters.js:427
msgid "Manufacturer"
msgstr ""
@@ -2920,7 +2928,7 @@ msgstr ""
#: company/models.py:365
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2042 templates/js/translated/company.js:581
+#: stock/models.py:2036 templates/js/translated/company.js:581
#: templates/js/translated/company.js:799 templates/js/translated/part.js:847
#: templates/js/translated/stock.js:1360
msgid "Value"
@@ -2930,7 +2938,7 @@ msgstr ""
msgid "Parameter value"
msgstr ""
-#: company/models.py:372 part/models.py:888 part/models.py:2421
+#: company/models.py:372 part/models.py:888 part/models.py:2426
#: part/templates/part/part_base.html:286
#: templates/InvenTree/settings/settings.html:352
#: templates/js/translated/company.js:805 templates/js/translated/part.js:853
@@ -2954,7 +2962,7 @@ msgstr ""
#: templates/js/translated/company.js:436
#: templates/js/translated/company.js:929 templates/js/translated/order.js:1975
#: templates/js/translated/part.js:217 templates/js/translated/part.js:993
-#: templates/js/translated/table_filters.js:423
+#: templates/js/translated/table_filters.js:431
msgid "Supplier"
msgstr ""
@@ -2986,22 +2994,22 @@ msgid "Supplier part description"
msgstr ""
#: company/models.py:523 company/templates/company/supplier_part.html:181
-#: part/models.py:2662 part/templates/part/upload_bom.html:59
+#: part/models.py:2679 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399
msgid "Note"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "base cost"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:529 company/templates/company/supplier_part.html:167
-#: stock/models.py:571 stock/templates/stock/item_base.html:243
+#: stock/models.py:570 stock/templates/stock/item_base.html:243
#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1974
msgid "Packaging"
msgstr ""
@@ -3023,7 +3031,7 @@ msgstr ""
msgid "Unit quantity supplied in a single pack"
msgstr ""
-#: company/models.py:539 part/models.py:1771
+#: company/models.py:539 part/models.py:1776
msgid "multiple"
msgstr ""
@@ -3034,10 +3042,10 @@ msgstr ""
#: company/models.py:547 company/templates/company/supplier_part.html:115
#: templates/email/build_order_required_stock.html:19
#: templates/email/low_stock_notification.html:18
-#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1823
-#: templates/js/translated/build.js:2686 templates/js/translated/part.js:598
+#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839
+#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598
#: templates/js/translated/part.js:601
-#: templates/js/translated/table_filters.js:186
+#: templates/js/translated/table_filters.js:194
msgid "Available"
msgstr ""
@@ -3109,13 +3117,13 @@ msgid "Download image from URL"
msgstr ""
#: company/templates/company/company_base.html:86 order/models.py:641
-#: order/templates/order/sales_order_base.html:116 stock/models.py:590
-#: stock/models.py:591 stock/serializers.py:809
+#: order/templates/order/sales_order_base.html:116 stock/models.py:589
+#: stock/models.py:590 stock/serializers.py:809
#: stock/templates/stock/item_base.html:399
#: templates/email/overdue_sales_order.html:16
#: templates/js/translated/company.js:428 templates/js/translated/order.js:2813
#: templates/js/translated/stock.js:2563
-#: templates/js/translated/table_filters.js:427
+#: templates/js/translated/table_filters.js:435
msgid "Customer"
msgstr ""
@@ -3234,7 +3242,7 @@ msgid "New Sales Order"
msgstr ""
#: company/templates/company/detail.html:168
-#: templates/js/translated/build.js:1693
+#: templates/js/translated/build.js:1709
msgid "Assigned Stock"
msgstr ""
@@ -3312,7 +3320,7 @@ msgid "Delete parameters"
msgstr ""
#: company/templates/company/manufacturer_part.html:245
-#: part/templates/part/detail.html:840
+#: part/templates/part/detail.html:839
msgid "Add Parameter"
msgstr ""
@@ -3333,7 +3341,7 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:554
+#: company/templates/company/supplier_part.html:24 stock/models.py:553
#: stock/templates/stock/item_base.html:236
#: templates/js/translated/company.js:945 templates/js/translated/order.js:1135
#: templates/js/translated/stock.js:1931
@@ -3444,7 +3452,7 @@ msgstr ""
#: company/templates/company/supplier_part.html:247
#: company/templates/company/supplier_part.html:388
-#: part/templates/part/prices.html:276 templates/js/translated/part.js:2294
+#: part/templates/part/prices.html:276 templates/js/translated/part.js:2293
msgid "Add Price Break"
msgstr ""
@@ -3457,12 +3465,12 @@ msgid "No price break information found"
msgstr ""
#: company/templates/company/supplier_part.html:314
-#: templates/js/translated/part.js:2304
+#: templates/js/translated/part.js:2303
msgid "Delete Price Break"
msgstr ""
#: company/templates/company/supplier_part.html:328
-#: templates/js/translated/part.js:2318
+#: templates/js/translated/part.js:2317
msgid "Edit Price Break"
msgstr ""
@@ -3488,8 +3496,8 @@ msgstr ""
#: stock/templates/stock/stock_app_base.html:10
#: templates/InvenTree/search.html:153
#: templates/InvenTree/settings/sidebar.html:45
-#: templates/js/translated/part.js:749 templates/js/translated/part.js:1334
-#: templates/js/translated/part.js:1500 templates/js/translated/stock.js:959
+#: templates/js/translated/part.js:749 templates/js/translated/part.js:1333
+#: templates/js/translated/part.js:1499 templates/js/translated/stock.js:959
#: templates/js/translated/stock.js:1756 templates/navbar.html:31
msgid "Stock"
msgstr ""
@@ -3793,7 +3801,7 @@ msgstr ""
#: order/models.py:1013 order/templates/order/order_base.html:178
#: templates/js/translated/order.js:1641 templates/js/translated/order.js:2373
#: templates/js/translated/part.js:1087 templates/js/translated/part.js:1125
-#: templates/js/translated/table_filters.js:338
+#: templates/js/translated/table_filters.js:346
msgid "Received"
msgstr ""
@@ -3801,7 +3809,7 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:681
+#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:680
#: stock/serializers.py:169 stock/templates/stock/item_base.html:189
#: templates/js/translated/stock.js:1962
msgid "Purchase Price"
@@ -4192,8 +4200,8 @@ msgstr ""
#: part/templates/part/import_wizard/ajax_match_fields.html:64
#: part/templates/part/import_wizard/ajax_match_references.html:42
#: part/templates/part/import_wizard/match_references.html:49
-#: templates/js/translated/bom.js:77 templates/js/translated/build.js:463
-#: templates/js/translated/build.js:615 templates/js/translated/build.js:2015
+#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479
+#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040
#: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586
#: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625
#: templates/js/translated/stock.js:793
@@ -4315,8 +4323,8 @@ msgid "Pending Shipments"
msgstr ""
#: order/templates/order/sales_order_detail.html:72
-#: templates/attachment_table.html:6 templates/js/translated/bom.js:1116
-#: templates/js/translated/build.js:1923
+#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133
+#: templates/js/translated/build.js:1943
msgid "Actions"
msgstr ""
@@ -4405,9 +4413,9 @@ msgid "Available Stock"
msgstr ""
#: part/bom.py:130 part/templates/part/part_base.html:213
-#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1853
+#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890
#: templates/js/translated/part.js:588 templates/js/translated/part.js:608
-#: templates/js/translated/part.js:1337 templates/js/translated/part.js:1525
+#: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524
#: templates/js/translated/table_filters.js:68
msgid "On Order"
msgstr ""
@@ -4436,7 +4444,7 @@ msgstr ""
msgid "Icon (optional)"
msgstr ""
-#: part/models.py:122 part/models.py:2504 part/templates/part/category.html:16
+#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
@@ -4453,7 +4461,7 @@ msgstr ""
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84
#: templates/InvenTree/settings/sidebar.html:41
-#: templates/js/translated/part.js:2016 templates/js/translated/search.js:146
+#: templates/js/translated/part.js:2015 templates/js/translated/search.js:146
#: templates/navbar.html:24 users/models.py:38
msgid "Parts"
msgstr ""
@@ -4483,7 +4491,7 @@ msgstr ""
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:745 part/models.py:2558
+#: part/models.py:745 part/models.py:2565
msgid "Part name"
msgstr ""
@@ -4516,11 +4524,11 @@ msgstr ""
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:783 part/models.py:2253 part/models.py:2503
+#: part/models.py:783 part/models.py:2258 part/models.py:2508
#: part/templates/part/part_base.html:263
#: templates/InvenTree/settings/settings.html:232
#: templates/js/translated/notification.js:50
-#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1723
+#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1722
msgid "Category"
msgstr ""
@@ -4529,7 +4537,7 @@ msgid "Part category"
msgstr ""
#: part/models.py:789 part/templates/part/part_base.html:272
-#: templates/js/translated/part.js:737 templates/js/translated/part.js:1430
+#: templates/js/translated/part.js:737 templates/js/translated/part.js:1429
#: templates/js/translated/stock.js:1726
msgid "IPN"
msgstr ""
@@ -4631,249 +4639,260 @@ msgstr ""
msgid "Creation User"
msgstr ""
-#: part/models.py:1771
+#: part/models.py:1776
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2300
+#: part/models.py:2305
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2317
+#: part/models.py:2322
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2337 templates/js/translated/part.js:2067
+#: part/models.py:2342 templates/js/translated/part.js:2066
#: templates/js/translated/stock.js:1340
msgid "Test Name"
msgstr ""
-#: part/models.py:2338
+#: part/models.py:2343
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2343
+#: part/models.py:2348
msgid "Test Description"
msgstr ""
-#: part/models.py:2344
+#: part/models.py:2349
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2349 templates/js/translated/part.js:2076
-#: templates/js/translated/table_filters.js:302
+#: part/models.py:2354 templates/js/translated/part.js:2075
+#: templates/js/translated/table_filters.js:310
msgid "Required"
msgstr ""
-#: part/models.py:2350
+#: part/models.py:2355
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2355 templates/js/translated/part.js:2084
+#: part/models.py:2360 templates/js/translated/part.js:2083
msgid "Requires Value"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2361
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2361 templates/js/translated/part.js:2091
+#: part/models.py:2366 templates/js/translated/part.js:2090
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2367
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2370
+#: part/models.py:2375
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2406
+#: part/models.py:2411
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2414
+#: part/models.py:2419
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2421
+#: part/models.py:2426
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2426
+#: part/models.py:2431
msgid "Parameter description"
msgstr ""
-#: part/models.py:2459
+#: part/models.py:2464
msgid "Parent Part"
msgstr ""
-#: part/models.py:2461 part/models.py:2509 part/models.py:2510
+#: part/models.py:2466 part/models.py:2514 part/models.py:2515
#: templates/InvenTree/settings/settings.html:227
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Data"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2514 templates/InvenTree/settings/settings.html:236
+#: part/models.py:2519 templates/InvenTree/settings/settings.html:236
msgid "Default Value"
msgstr ""
-#: part/models.py:2515
+#: part/models.py:2520
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2550
+#: part/models.py:2557
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2553 templates/js/translated/model_renderers.js:212
+#: part/models.py:2560 templates/js/translated/model_renderers.js:212
msgid "Part ID"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2561
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2557
+#: part/models.py:2564
msgid "Part Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2568
msgid "Part IPN"
msgstr ""
-#: part/models.py:2562
+#: part/models.py:2569
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2565
+#: part/models.py:2572
msgid "Level"
msgstr ""
-#: part/models.py:2566
+#: part/models.py:2573
msgid "BOM level"
msgstr ""
-#: part/models.py:2635
+#: part/models.py:2642
msgid "Select parent part"
msgstr ""
-#: part/models.py:2643
+#: part/models.py:2650
msgid "Sub part"
msgstr ""
-#: part/models.py:2644
+#: part/models.py:2651
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2650
+#: part/models.py:2657
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2652 part/templates/part/upload_bom.html:58
-#: templates/js/translated/bom.js:876 templates/js/translated/bom.js:1005
-#: templates/js/translated/table_filters.js:100
+#: part/models.py:2661 part/templates/part/upload_bom.html:58
+#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999
+#: templates/js/translated/table_filters.js:84
+#: templates/js/translated/table_filters.js:108
msgid "Optional"
msgstr ""
-#: part/models.py:2652
+#: part/models.py:2662
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2655 part/templates/part/upload_bom.html:55
+#: part/models.py:2667 templates/js/translated/bom.js:895
+#: templates/js/translated/bom.js:1008
+#: templates/js/translated/table_filters.js:88
+msgid "Consumable"
+msgstr ""
+
+#: part/models.py:2668
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:2672 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2656
+#: part/models.py:2673
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2659
+#: part/models.py:2676
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2662
+#: part/models.py:2679
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "Checksum"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2668 part/templates/part/upload_bom.html:57
-#: templates/js/translated/bom.js:1022
+#: part/models.py:2685 part/templates/part/upload_bom.html:57
+#: templates/js/translated/bom.js:1025
#: templates/js/translated/table_filters.js:76
-#: templates/js/translated/table_filters.js:96
+#: templates/js/translated/table_filters.js:104
msgid "Inherited"
msgstr ""
-#: part/models.py:2669
+#: part/models.py:2686
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2674 part/templates/part/upload_bom.html:56
-#: templates/js/translated/bom.js:1014
+#: part/models.py:2691 part/templates/part/upload_bom.html:56
+#: templates/js/translated/bom.js:1017
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2675
+#: part/models.py:2692
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2753 stock/models.py:447
+#: part/models.py:2778 stock/models.py:446
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2762 part/models.py:2764
+#: part/models.py:2787 part/models.py:2789
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2869
+#: part/models.py:2894
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:2890
+#: part/models.py:2915
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:2903
+#: part/models.py:2928
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:2911
+#: part/models.py:2936
msgid "Substitute part"
msgstr ""
-#: part/models.py:2926
+#: part/models.py:2951
msgid "Part 1"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Part 2"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2948
+#: part/models.py:2973
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:2952
+#: part/models.py:2977
msgid "Duplicate relationship already exists"
msgstr ""
@@ -4881,75 +4900,75 @@ msgstr ""
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:815
+#: part/serializers.py:829
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:823
+#: part/serializers.py:837
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:824
+#: part/serializers.py:838
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:829
+#: part/serializers.py:843
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:830
+#: part/serializers.py:844
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:835
+#: part/serializers.py:849
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:836
+#: part/serializers.py:850
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:841
+#: part/serializers.py:855
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:842
+#: part/serializers.py:856
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:882
+#: part/serializers.py:896
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:883
+#: part/serializers.py:897
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:913
+#: part/serializers.py:927
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:956
+#: part/serializers.py:970
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:959
+#: part/serializers.py:973
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:962
+#: part/serializers.py:976
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:971
+#: part/serializers.py:985
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:979
+#: part/serializers.py:993
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1000
+#: part/serializers.py:1014
msgid "At least one BOM item is required"
msgstr ""
@@ -5243,22 +5262,22 @@ msgstr ""
msgid "Add Test Result Template"
msgstr ""
-#: part/templates/part/detail.html:914
+#: part/templates/part/detail.html:913
#, python-format
msgid "Purchase Unit Price - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:926
+#: part/templates/part/detail.html:925
#, python-format
msgid "Unit Price-Cost Difference - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:938
+#: part/templates/part/detail.html:937
#, python-format
msgid "Supplier Unit Cost - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:1027
+#: part/templates/part/detail.html:1026
#, python-format
msgid "Unit Price - %(currency)s"
msgstr ""
@@ -5412,7 +5431,7 @@ msgstr ""
#: part/templates/part/part_base.html:200
#: templates/js/translated/company.js:1027
-#: templates/js/translated/table_filters.js:201
+#: templates/js/translated/table_filters.js:209
msgid "In Stock"
msgstr ""
@@ -5426,13 +5445,13 @@ msgstr ""
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1043
+#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075
msgid "Can Build"
msgstr ""
#: part/templates/part/part_base.html:244 templates/js/translated/part.js:591
-#: templates/js/translated/part.js:611 templates/js/translated/part.js:1341
-#: templates/js/translated/part.js:1532
+#: templates/js/translated/part.js:611 templates/js/translated/part.js:1340
+#: templates/js/translated/part.js:1531
msgid "Building"
msgstr ""
@@ -5488,7 +5507,7 @@ msgid "Total Cost"
msgstr ""
#: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43
-#: templates/js/translated/bom.js:997
+#: templates/js/translated/bom.js:1066
msgid "No supplier pricing available"
msgstr ""
@@ -5583,7 +5602,7 @@ msgstr ""
msgid "Calculation parameters"
msgstr ""
-#: part/templates/part/prices.html:160 templates/js/translated/bom.js:991
+#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060
msgid "Supplier Cost"
msgstr ""
@@ -5622,7 +5641,7 @@ msgid "No sale pice history available for this part."
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:614
-#: templates/js/translated/part.js:1329 templates/js/translated/part.js:1331
+#: templates/js/translated/part.js:1328 templates/js/translated/part.js:1330
msgid "No Stock"
msgstr ""
@@ -5993,9 +6012,9 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:595 stock/templates/stock/item_base.html:320
-#: templates/js/translated/build.js:456 templates/js/translated/build.js:608
-#: templates/js/translated/build.js:1209 templates/js/translated/build.js:1706
+#: stock/models.py:594 stock/templates/stock/item_base.html:320
+#: templates/js/translated/build.js:472 templates/js/translated/build.js:624
+#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722
#: templates/js/translated/model_renderers.js:118
#: templates/js/translated/order.js:121 templates/js/translated/order.js:3597
#: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490
@@ -6007,12 +6026,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2030
+#: stock/models.py:2024
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2036
+#: stock/models.py:2030
msgid "Result"
msgstr ""
@@ -6047,241 +6066,241 @@ msgstr ""
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:90 stock/models.py:686
+#: stock/models.py:90 stock/models.py:685
#: stock/templates/stock/item_base.html:250
msgid "Owner"
msgstr ""
-#: stock/models.py:91 stock/models.py:687
+#: stock/models.py:91 stock/models.py:686
msgid "Select Owner"
msgstr ""
-#: stock/models.py:421
+#: stock/models.py:420
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:453 stock/serializers.py:93
+#: stock/models.py:452 stock/serializers.py:93
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:470
+#: stock/models.py:469
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:480 stock/models.py:489
+#: stock/models.py:479 stock/models.py:488
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:481
+#: stock/models.py:480
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:503
+#: stock/models.py:502
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:509
+#: stock/models.py:508
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:522
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:537
+#: stock/models.py:536
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:547
+#: stock/models.py:546
msgid "Base part"
msgstr ""
-#: stock/models.py:555
+#: stock/models.py:554
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:562 stock/templates/stock/location.html:17
+#: stock/models.py:561 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:564
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:572
+#: stock/models.py:571
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:578 stock/templates/stock/item_base.html:359
+#: stock/models.py:577 stock/templates/stock/item_base.html:359
msgid "Installed In"
msgstr ""
-#: stock/models.py:581
+#: stock/models.py:580
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:597
+#: stock/models.py:596
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:611
+#: stock/models.py:610
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:616
+#: stock/models.py:615
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:624
msgid "Source Build"
msgstr ""
-#: stock/models.py:627
+#: stock/models.py:626
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:638
+#: stock/models.py:637
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:640
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:647
+#: stock/models.py:646
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:653 stock/templates/stock/item_base.html:427
+#: stock/models.py:652 stock/templates/stock/item_base.html:427
#: templates/js/translated/stock.js:1881
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:654
+#: stock/models.py:653
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:674 stock/templates/stock/item.html:132
+#: stock/models.py:673 stock/templates/stock/item.html:132
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:682
+#: stock/models.py:681
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:709
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1189
+#: stock/models.py:1183
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1195
+#: stock/models.py:1189
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1201
+#: stock/models.py:1195
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1204
+#: stock/models.py:1198
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1207
+#: stock/models.py:1201
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1214
+#: stock/models.py:1208
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1284
+#: stock/models.py:1278
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1287
+#: stock/models.py:1281
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1290
+#: stock/models.py:1284
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1293
+#: stock/models.py:1287
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1296
+#: stock/models.py:1290
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1299
+#: stock/models.py:1293
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1306 stock/serializers.py:959
+#: stock/models.py:1300 stock/serializers.py:959
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1310
+#: stock/models.py:1304
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1314
+#: stock/models.py:1308
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1318
+#: stock/models.py:1312
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1487
+#: stock/models.py:1481
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:1948
+#: stock/models.py:1942
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2006
+#: stock/models.py:2000
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2012
+#: stock/models.py:2006
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2031
+#: stock/models.py:2025
msgid "Test name"
msgstr ""
-#: stock/models.py:2037
+#: stock/models.py:2031
msgid "Test result"
msgstr ""
-#: stock/models.py:2043
+#: stock/models.py:2037
msgid "Test output value"
msgstr ""
-#: stock/models.py:2050
+#: stock/models.py:2044
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2056
+#: stock/models.py:2050
msgid "Test notes"
msgstr ""
@@ -6599,7 +6618,7 @@ msgid "Available Quantity"
msgstr ""
#: stock/templates/stock/item_base.html:392
-#: templates/js/translated/build.js:1729
+#: templates/js/translated/build.js:1745
msgid "No location set"
msgstr ""
@@ -6613,7 +6632,7 @@ msgid "This StockItem expired on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:431
-#: templates/js/translated/table_filters.js:269
+#: templates/js/translated/table_filters.js:277
msgid "Expired"
msgstr ""
@@ -6623,7 +6642,7 @@ msgid "This StockItem expires on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:433
-#: templates/js/translated/table_filters.js:275
+#: templates/js/translated/table_filters.js:283
msgid "Stale"
msgstr ""
@@ -7433,64 +7452,64 @@ msgstr ""
msgid "Do you really want to remove the selected email address?"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:27
+#: templates/InvenTree/settings/user_display.html:28
msgid "Theme Settings"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:37
+#: templates/InvenTree/settings/user_display.html:38
msgid "Select theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:48
+#: templates/InvenTree/settings/user_display.html:49
msgid "Set Theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:56
+#: templates/InvenTree/settings/user_display.html:57
msgid "Language Settings"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:65
+#: templates/InvenTree/settings/user_display.html:66
msgid "Select language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:81
+#: templates/InvenTree/settings/user_display.html:82
#, python-format
msgid "%(lang_translated)s%% translated"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:83
+#: templates/InvenTree/settings/user_display.html:84
msgid "No translations available"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:90
+#: templates/InvenTree/settings/user_display.html:91
msgid "Set Language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:93
+#: templates/InvenTree/settings/user_display.html:94
msgid "Some languages are not complete"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:95
+#: templates/InvenTree/settings/user_display.html:96
msgid "Show only sufficent"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "and hidden."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "Show them too"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:104
+#: templates/InvenTree/settings/user_display.html:105
msgid "Help the translation efforts!"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:105
+#: templates/InvenTree/settings/user_display.html:106
msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:106
+#: templates/InvenTree/settings/user_display.html:107
msgid "InvenTree Translation Project"
msgstr ""
@@ -7787,7 +7806,7 @@ msgid "The following parts are low on required stock"
msgstr ""
#: templates/email/build_order_required_stock.html:18
-#: templates/js/translated/bom.js:1489
+#: templates/js/translated/bom.js:1506
msgid "Required Quantity"
msgstr ""
@@ -7801,7 +7820,7 @@ msgid "Click on the following link to view this part"
msgstr ""
#: templates/email/low_stock_notification.html:19
-#: templates/js/translated/part.js:2563
+#: templates/js/translated/part.js:2562
msgid "Minimum Quantity"
msgstr ""
@@ -7999,7 +8018,7 @@ msgstr ""
msgid "Row Data"
msgstr ""
-#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:620
+#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
#: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601
#: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003
#: templates/js/translated/order.js:1179 templates/modals.html:15
@@ -8069,117 +8088,118 @@ msgstr ""
msgid "Include part supplier data in exported BOM"
msgstr ""
-#: templates/js/translated/bom.js:511
+#: templates/js/translated/bom.js:512
msgid "Remove substitute part"
msgstr ""
-#: templates/js/translated/bom.js:565
+#: templates/js/translated/bom.js:566
msgid "Select and add a new substitute part using the input below"
msgstr ""
-#: templates/js/translated/bom.js:576
+#: templates/js/translated/bom.js:577
msgid "Are you sure you wish to remove this substitute part link?"
msgstr ""
-#: templates/js/translated/bom.js:582
+#: templates/js/translated/bom.js:583
msgid "Remove Substitute Part"
msgstr ""
-#: templates/js/translated/bom.js:621
+#: templates/js/translated/bom.js:622
msgid "Add Substitute"
msgstr ""
-#: templates/js/translated/bom.js:622
+#: templates/js/translated/bom.js:623
msgid "Edit BOM Item Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:684
+#: templates/js/translated/bom.js:685
msgid "All selected BOM items will be deleted"
msgstr ""
-#: templates/js/translated/bom.js:700
+#: templates/js/translated/bom.js:701
msgid "Delete selected BOM items?"
msgstr ""
-#: templates/js/translated/bom.js:819
+#: templates/js/translated/bom.js:835
msgid "Load BOM for subassembly"
msgstr ""
-#: templates/js/translated/bom.js:829
+#: templates/js/translated/bom.js:845
msgid "Substitutes Available"
msgstr ""
-#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1805
+#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821
msgid "Variant stock allowed"
msgstr ""
-#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1857
+#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872
#: templates/js/translated/order.js:3932
msgid "No Stock Available"
msgstr ""
-#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1861
+#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876
msgid "Includes variant and substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1863
-#: templates/js/translated/part.js:761 templates/js/translated/part.js:1538
+#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878
+#: templates/js/translated/part.js:761 templates/js/translated/part.js:1537
msgid "Includes variant stock"
msgstr ""
-#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1865
+#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880
msgid "Includes substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:962
+#: templates/js/translated/bom.js:985
msgid "Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:977
-msgid "Purchase Price Range"
-msgstr ""
-
-#: templates/js/translated/bom.js:984
-msgid "Purchase Price Average"
-msgstr ""
-
-#: templates/js/translated/bom.js:1033 templates/js/translated/bom.js:1153
+#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170
msgid "View BOM"
msgstr ""
-#: templates/js/translated/bom.js:1060
-msgid "Including On Order"
+#: templates/js/translated/bom.js:1046
+msgid "Purchase Price Range"
msgstr ""
-#: templates/js/translated/bom.js:1124
+#: templates/js/translated/bom.js:1053
+msgid "Purchase Price Average"
+msgstr ""
+
+#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863
+#: templates/js/translated/build.js:1947
+msgid "Consumable item"
+msgstr ""
+
+#: templates/js/translated/bom.js:1141
msgid "Validate BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1126
+#: templates/js/translated/bom.js:1143
msgid "This line has been validated"
msgstr ""
-#: templates/js/translated/bom.js:1128
+#: templates/js/translated/bom.js:1145
msgid "Edit substitute parts"
msgstr ""
-#: templates/js/translated/bom.js:1130 templates/js/translated/bom.js:1292
+#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1309
msgid "Edit BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1132
+#: templates/js/translated/bom.js:1149
msgid "Delete BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1650
+#: templates/js/translated/bom.js:1245 templates/js/translated/build.js:1666
msgid "No BOM items found"
msgstr ""
-#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1789
+#: templates/js/translated/bom.js:1489 templates/js/translated/build.js:1805
msgid "Required Part"
msgstr ""
-#: templates/js/translated/bom.js:1498
+#: templates/js/translated/bom.js:1515
msgid "Inherited from parent BOM"
msgstr ""
@@ -8207,256 +8227,260 @@ msgstr ""
msgid "There are incomplete outputs remaining for this build order"
msgstr ""
-#: templates/js/translated/build.js:217
+#: templates/js/translated/build.js:239
msgid "Build order is ready to be completed"
msgstr ""
-#: templates/js/translated/build.js:222
+#: templates/js/translated/build.js:247
+msgid "This build order cannot be completed as there are incomplete outputs"
+msgstr ""
+
+#: templates/js/translated/build.js:252
msgid "Build Order is incomplete"
msgstr ""
-#: templates/js/translated/build.js:254
+#: templates/js/translated/build.js:270
msgid "Complete Build Order"
msgstr ""
-#: templates/js/translated/build.js:295 templates/js/translated/stock.js:92
+#: templates/js/translated/build.js:311 templates/js/translated/stock.js:92
#: templates/js/translated/stock.js:214
msgid "Next available serial number"
msgstr ""
-#: templates/js/translated/build.js:297 templates/js/translated/stock.js:94
+#: templates/js/translated/build.js:313 templates/js/translated/stock.js:94
#: templates/js/translated/stock.js:216
msgid "Latest serial number"
msgstr ""
-#: templates/js/translated/build.js:306
+#: templates/js/translated/build.js:322
msgid "The Bill of Materials contains trackable parts"
msgstr ""
-#: templates/js/translated/build.js:307
+#: templates/js/translated/build.js:323
msgid "Build outputs must be generated individually"
msgstr ""
-#: templates/js/translated/build.js:315
+#: templates/js/translated/build.js:331
msgid "Trackable parts can have serial numbers specified"
msgstr ""
-#: templates/js/translated/build.js:316
+#: templates/js/translated/build.js:332
msgid "Enter serial numbers to generate multiple single build outputs"
msgstr ""
-#: templates/js/translated/build.js:323
+#: templates/js/translated/build.js:339
msgid "Create Build Output"
msgstr ""
-#: templates/js/translated/build.js:354
+#: templates/js/translated/build.js:370
msgid "Allocate stock items to this build output"
msgstr ""
-#: templates/js/translated/build.js:365
+#: templates/js/translated/build.js:381
msgid "Unallocate stock from build output"
msgstr ""
-#: templates/js/translated/build.js:374
+#: templates/js/translated/build.js:390
msgid "Complete build output"
msgstr ""
-#: templates/js/translated/build.js:382
+#: templates/js/translated/build.js:398
msgid "Delete build output"
msgstr ""
-#: templates/js/translated/build.js:405
+#: templates/js/translated/build.js:421
msgid "Are you sure you wish to unallocate stock items from this build?"
msgstr ""
-#: templates/js/translated/build.js:423
+#: templates/js/translated/build.js:439
msgid "Unallocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:443 templates/js/translated/build.js:595
+#: templates/js/translated/build.js:459 templates/js/translated/build.js:611
msgid "Select Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:444 templates/js/translated/build.js:596
+#: templates/js/translated/build.js:460 templates/js/translated/build.js:612
msgid "At least one build output must be selected"
msgstr ""
-#: templates/js/translated/build.js:498 templates/js/translated/build.js:650
+#: templates/js/translated/build.js:514 templates/js/translated/build.js:666
msgid "Output"
msgstr ""
-#: templates/js/translated/build.js:516
+#: templates/js/translated/build.js:532
msgid "Complete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:663
+#: templates/js/translated/build.js:679
msgid "Delete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:753
+#: templates/js/translated/build.js:769
msgid "No build order allocations found"
msgstr ""
-#: templates/js/translated/build.js:790
+#: templates/js/translated/build.js:806
msgid "Location not specified"
msgstr ""
-#: templates/js/translated/build.js:1169
+#: templates/js/translated/build.js:1185
msgid "No active build outputs found"
msgstr ""
-#: templates/js/translated/build.js:1238
+#: templates/js/translated/build.js:1254
msgid "Allocated Stock"
msgstr ""
-#: templates/js/translated/build.js:1245
+#: templates/js/translated/build.js:1261
msgid "No tracked BOM items for this build"
msgstr ""
-#: templates/js/translated/build.js:1267
+#: templates/js/translated/build.js:1283
msgid "Completed Tests"
msgstr ""
-#: templates/js/translated/build.js:1272
+#: templates/js/translated/build.js:1288
msgid "No required tests for this build"
msgstr ""
-#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2697
+#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727
#: templates/js/translated/order.js:3632
msgid "Edit stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1748 templates/js/translated/build.js:2698
+#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728
#: templates/js/translated/order.js:3633
msgid "Delete stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1766
+#: templates/js/translated/build.js:1782
msgid "Edit Allocation"
msgstr ""
-#: templates/js/translated/build.js:1776
+#: templates/js/translated/build.js:1792
msgid "Remove Allocation"
msgstr ""
-#: templates/js/translated/build.js:1801
+#: templates/js/translated/build.js:1817
msgid "Substitute parts available"
msgstr ""
-#: templates/js/translated/build.js:1818
+#: templates/js/translated/build.js:1834
msgid "Quantity Per"
msgstr ""
-#: templates/js/translated/build.js:1847 templates/js/translated/order.js:3939
+#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939
msgid "Insufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1849 templates/js/translated/order.js:3937
+#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937
msgid "Sufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1882 templates/js/translated/build.js:2127
-#: templates/js/translated/build.js:2693 templates/js/translated/order.js:3951
+#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157
+#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1930 templates/js/translated/order.js:4031
+#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031
msgid "Build stock"
msgstr ""
-#: templates/js/translated/build.js:1934 templates/stock_table.html:50
+#: templates/js/translated/build.js:1959 templates/stock_table.html:50
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1937 templates/js/translated/order.js:4024
+#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024
msgid "Allocate stock"
msgstr ""
-#: templates/js/translated/build.js:1976 templates/js/translated/label.js:172
+#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172
#: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1977 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2026 templates/js/translated/order.js:3108
+#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108
msgid "Specify stock allocation quantity"
msgstr ""
-#: templates/js/translated/build.js:2100
+#: templates/js/translated/build.js:2130
msgid "All Parts Allocated"
msgstr ""
-#: templates/js/translated/build.js:2101
+#: templates/js/translated/build.js:2131
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2115 templates/js/translated/order.js:3174
+#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
-#: templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2173
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2154 templates/js/translated/order.js:3271
+#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2226 templates/js/translated/order.js:3348
+#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348
msgid "No matching stock items"
msgstr ""
-#: templates/js/translated/build.js:2323
+#: templates/js/translated/build.js:2353
msgid "Automatic Stock Allocation"
msgstr ""
-#: templates/js/translated/build.js:2324
+#: templates/js/translated/build.js:2354
msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines"
msgstr ""
-#: templates/js/translated/build.js:2326
+#: templates/js/translated/build.js:2356
msgid "If a location is specifed, stock will only be allocated from that location"
msgstr ""
-#: templates/js/translated/build.js:2327
+#: templates/js/translated/build.js:2357
msgid "If stock is considered interchangeable, it will be allocated from the first location it is found"
msgstr ""
-#: templates/js/translated/build.js:2328
+#: templates/js/translated/build.js:2358
msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found"
msgstr ""
-#: templates/js/translated/build.js:2349
+#: templates/js/translated/build.js:2379
msgid "Allocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:2455
+#: templates/js/translated/build.js:2485
msgid "No builds matching query"
msgstr ""
-#: templates/js/translated/build.js:2490 templates/js/translated/part.js:1422
-#: templates/js/translated/part.js:1954 templates/js/translated/stock.js:1686
+#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421
+#: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686
#: templates/js/translated/stock.js:2384
msgid "Select"
msgstr ""
-#: templates/js/translated/build.js:2504
+#: templates/js/translated/build.js:2534
msgid "Build order is overdue"
msgstr ""
-#: templates/js/translated/build.js:2532
+#: templates/js/translated/build.js:2562
msgid "Progress"
msgstr ""
-#: templates/js/translated/build.js:2568 templates/js/translated/stock.js:2651
+#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2651
msgid "No user information"
msgstr ""
-#: templates/js/translated/build.js:2674
+#: templates/js/translated/build.js:2704
msgid "No parts allocated for"
msgstr ""
@@ -8644,23 +8668,23 @@ msgstr ""
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1922 templates/search.html:29
+#: templates/js/translated/forms.js:1923 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2175
+#: templates/js/translated/forms.js:2176
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2653
+#: templates/js/translated/forms.js:2654
msgid "Select Columns"
msgstr ""
@@ -8672,7 +8696,7 @@ msgstr ""
msgid "NO"
msgstr ""
-#: templates/js/translated/helpers.js:362
+#: templates/js/translated/helpers.js:363
msgid "Notes updated"
msgstr ""
@@ -9091,7 +9115,7 @@ msgstr ""
#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2503
#: templates/js/translated/order.js:3842 templates/js/translated/order.js:4350
-#: templates/js/translated/part.js:2196 templates/js/translated/part.js:2794
+#: templates/js/translated/part.js:2195 templates/js/translated/part.js:2793
msgid "Unit Price"
msgstr ""
@@ -9446,8 +9470,8 @@ msgstr ""
msgid "Copy Bill of Materials"
msgstr ""
-#: templates/js/translated/part.js:584 templates/js/translated/part.js:1520
-#: templates/js/translated/table_filters.js:468
+#: templates/js/translated/part.js:584 templates/js/translated/part.js:1519
+#: templates/js/translated/table_filters.js:476
msgid "Low stock"
msgstr ""
@@ -9483,140 +9507,140 @@ msgstr ""
msgid "Delete Part Relationship"
msgstr ""
-#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1608
+#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1607
msgid "No parts found"
msgstr ""
-#: templates/js/translated/part.js:1487
+#: templates/js/translated/part.js:1486
msgid "No category"
msgstr ""
-#: templates/js/translated/part.js:1518
+#: templates/js/translated/part.js:1517
msgid "No stock"
msgstr ""
-#: templates/js/translated/part.js:1542
+#: templates/js/translated/part.js:1541
msgid "Allocated to build orders"
msgstr ""
-#: templates/js/translated/part.js:1546
+#: templates/js/translated/part.js:1545
msgid "Allocated to sales orders"
msgstr ""
-#: templates/js/translated/part.js:1632 templates/js/translated/part.js:1875
+#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1874
#: templates/js/translated/stock.js:2345
msgid "Display as list"
msgstr ""
-#: templates/js/translated/part.js:1648
+#: templates/js/translated/part.js:1647
msgid "Display as grid"
msgstr ""
-#: templates/js/translated/part.js:1714
+#: templates/js/translated/part.js:1713
msgid "Set the part category for the selected parts"
msgstr ""
-#: templates/js/translated/part.js:1719
+#: templates/js/translated/part.js:1718
msgid "Set Part Category"
msgstr ""
-#: templates/js/translated/part.js:1724
+#: templates/js/translated/part.js:1723
msgid "Select Part Category"
msgstr ""
-#: templates/js/translated/part.js:1737
+#: templates/js/translated/part.js:1736
msgid "Category is required"
msgstr ""
-#: templates/js/translated/part.js:1894 templates/js/translated/stock.js:2364
+#: templates/js/translated/part.js:1893 templates/js/translated/stock.js:2364
msgid "Display as tree"
msgstr ""
-#: templates/js/translated/part.js:1973
+#: templates/js/translated/part.js:1972
msgid "Load Subcategories"
msgstr ""
-#: templates/js/translated/part.js:1989
+#: templates/js/translated/part.js:1988
msgid "Subscribed category"
msgstr ""
-#: templates/js/translated/part.js:2053
+#: templates/js/translated/part.js:2052
msgid "No test templates matching query"
msgstr ""
-#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1299
+#: templates/js/translated/part.js:2103 templates/js/translated/stock.js:1299
msgid "Edit test result"
msgstr ""
-#: templates/js/translated/part.js:2105 templates/js/translated/stock.js:1300
+#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1300
#: templates/js/translated/stock.js:1560
msgid "Delete test result"
msgstr ""
-#: templates/js/translated/part.js:2111
+#: templates/js/translated/part.js:2110
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/translated/part.js:2133
+#: templates/js/translated/part.js:2132
msgid "Edit Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2147
+#: templates/js/translated/part.js:2146
msgid "Delete Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2172
+#: templates/js/translated/part.js:2171
#, python-brace-format
msgid "No ${human_name} information found"
msgstr ""
-#: templates/js/translated/part.js:2229
+#: templates/js/translated/part.js:2228
#, python-brace-format
msgid "Edit ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2230
+#: templates/js/translated/part.js:2229
#, python-brace-format
msgid "Delete ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2395 templates/js/translated/part.js:2396
+#: templates/js/translated/part.js:2394 templates/js/translated/part.js:2395
msgid "No date specified"
msgstr ""
-#: templates/js/translated/part.js:2398
+#: templates/js/translated/part.js:2397
msgid "Specified date is in the past"
msgstr ""
-#: templates/js/translated/part.js:2404
+#: templates/js/translated/part.js:2403
msgid "Speculative"
msgstr ""
-#: templates/js/translated/part.js:2454
+#: templates/js/translated/part.js:2453
msgid "No scheduling information available for this part"
msgstr ""
-#: templates/js/translated/part.js:2460
+#: templates/js/translated/part.js:2459
msgid "Error fetching scheduling information for this part"
msgstr ""
-#: templates/js/translated/part.js:2556
+#: templates/js/translated/part.js:2555
msgid "Scheduled Stock Quantities"
msgstr ""
-#: templates/js/translated/part.js:2572
+#: templates/js/translated/part.js:2571
msgid "Maximum Quantity"
msgstr ""
-#: templates/js/translated/part.js:2617
+#: templates/js/translated/part.js:2616
msgid "Minimum Stock Level"
msgstr ""
-#: templates/js/translated/part.js:2718
+#: templates/js/translated/part.js:2717
msgid "Single Price"
msgstr ""
-#: templates/js/translated/part.js:2737
+#: templates/js/translated/part.js:2736
msgid "Single Price Difference"
msgstr ""
@@ -9979,7 +10003,7 @@ msgid "Stock item is destroyed"
msgstr ""
#: templates/js/translated/stock.js:1816
-#: templates/js/translated/table_filters.js:196
+#: templates/js/translated/table_filters.js:204
msgid "Depleted"
msgstr ""
@@ -10103,215 +10127,215 @@ msgstr ""
msgid "Allow Variant Stock"
msgstr ""
-#: templates/js/translated/table_filters.js:118
-#: templates/js/translated/table_filters.js:191
+#: templates/js/translated/table_filters.js:126
+#: templates/js/translated/table_filters.js:199
msgid "Include sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:119
+#: templates/js/translated/table_filters.js:127
msgid "Include locations"
msgstr ""
-#: templates/js/translated/table_filters.js:129
-#: templates/js/translated/table_filters.js:130
-#: templates/js/translated/table_filters.js:437
+#: templates/js/translated/table_filters.js:137
+#: templates/js/translated/table_filters.js:138
+#: templates/js/translated/table_filters.js:445
msgid "Include subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:134
-#: templates/js/translated/table_filters.js:480
+#: templates/js/translated/table_filters.js:142
+#: templates/js/translated/table_filters.js:488
msgid "Subscribed"
msgstr ""
-#: templates/js/translated/table_filters.js:144
-#: templates/js/translated/table_filters.js:226
+#: templates/js/translated/table_filters.js:152
+#: templates/js/translated/table_filters.js:234
msgid "Is Serialized"
msgstr ""
-#: templates/js/translated/table_filters.js:147
-#: templates/js/translated/table_filters.js:233
+#: templates/js/translated/table_filters.js:155
+#: templates/js/translated/table_filters.js:241
msgid "Serial number GTE"
msgstr ""
-#: templates/js/translated/table_filters.js:148
-#: templates/js/translated/table_filters.js:234
+#: templates/js/translated/table_filters.js:156
+#: templates/js/translated/table_filters.js:242
msgid "Serial number greater than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:151
-#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:159
+#: templates/js/translated/table_filters.js:245
msgid "Serial number LTE"
msgstr ""
-#: templates/js/translated/table_filters.js:152
-#: templates/js/translated/table_filters.js:238
+#: templates/js/translated/table_filters.js:160
+#: templates/js/translated/table_filters.js:246
msgid "Serial number less than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:155
-#: templates/js/translated/table_filters.js:156
-#: templates/js/translated/table_filters.js:229
-#: templates/js/translated/table_filters.js:230
+#: templates/js/translated/table_filters.js:163
+#: templates/js/translated/table_filters.js:164
+#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:238
msgid "Serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:160
-#: templates/js/translated/table_filters.js:251
+#: templates/js/translated/table_filters.js:168
+#: templates/js/translated/table_filters.js:259
msgid "Batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:171
-#: templates/js/translated/table_filters.js:409
+#: templates/js/translated/table_filters.js:179
+#: templates/js/translated/table_filters.js:417
msgid "Active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:172
+#: templates/js/translated/table_filters.js:180
msgid "Show stock for active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:177
+#: templates/js/translated/table_filters.js:185
msgid "Part is an assembly"
msgstr ""
-#: templates/js/translated/table_filters.js:181
+#: templates/js/translated/table_filters.js:189
msgid "Is allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:182
+#: templates/js/translated/table_filters.js:190
msgid "Item has been allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:187
+#: templates/js/translated/table_filters.js:195
msgid "Stock is available for use"
msgstr ""
-#: templates/js/translated/table_filters.js:192
+#: templates/js/translated/table_filters.js:200
msgid "Include stock in sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:197
+#: templates/js/translated/table_filters.js:205
msgid "Show stock items which are depleted"
msgstr ""
-#: templates/js/translated/table_filters.js:202
+#: templates/js/translated/table_filters.js:210
msgid "Show items which are in stock"
msgstr ""
-#: templates/js/translated/table_filters.js:206
+#: templates/js/translated/table_filters.js:214
msgid "In Production"
msgstr ""
-#: templates/js/translated/table_filters.js:207
+#: templates/js/translated/table_filters.js:215
msgid "Show items which are in production"
msgstr ""
-#: templates/js/translated/table_filters.js:211
+#: templates/js/translated/table_filters.js:219
msgid "Include Variants"
msgstr ""
-#: templates/js/translated/table_filters.js:212
+#: templates/js/translated/table_filters.js:220
msgid "Include stock items for variant parts"
msgstr ""
-#: templates/js/translated/table_filters.js:216
+#: templates/js/translated/table_filters.js:224
msgid "Installed"
msgstr ""
-#: templates/js/translated/table_filters.js:217
+#: templates/js/translated/table_filters.js:225
msgid "Show stock items which are installed in another item"
msgstr ""
-#: templates/js/translated/table_filters.js:222
+#: templates/js/translated/table_filters.js:230
msgid "Show items which have been assigned to a customer"
msgstr ""
-#: templates/js/translated/table_filters.js:242
-#: templates/js/translated/table_filters.js:243
+#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:251
msgid "Stock status"
msgstr ""
-#: templates/js/translated/table_filters.js:246
+#: templates/js/translated/table_filters.js:254
msgid "Has batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:254
+#: templates/js/translated/table_filters.js:262
msgid "Tracked"
msgstr ""
-#: templates/js/translated/table_filters.js:255
+#: templates/js/translated/table_filters.js:263
msgid "Stock item is tracked by either batch code or serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:260
+#: templates/js/translated/table_filters.js:268
msgid "Has purchase price"
msgstr ""
-#: templates/js/translated/table_filters.js:261
+#: templates/js/translated/table_filters.js:269
msgid "Show stock items which have a purchase price set"
msgstr ""
-#: templates/js/translated/table_filters.js:270
+#: templates/js/translated/table_filters.js:278
msgid "Show stock items which have expired"
msgstr ""
-#: templates/js/translated/table_filters.js:276
+#: templates/js/translated/table_filters.js:284
msgid "Show stock which is close to expiring"
msgstr ""
-#: templates/js/translated/table_filters.js:288
+#: templates/js/translated/table_filters.js:296
msgid "Test Passed"
msgstr ""
-#: templates/js/translated/table_filters.js:292
+#: templates/js/translated/table_filters.js:300
msgid "Include Installed Items"
msgstr ""
-#: templates/js/translated/table_filters.js:311
+#: templates/js/translated/table_filters.js:319
msgid "Build status"
msgstr ""
-#: templates/js/translated/table_filters.js:324
-#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:332
+#: templates/js/translated/table_filters.js:373
msgid "Assigned to me"
msgstr ""
-#: templates/js/translated/table_filters.js:341
-#: templates/js/translated/table_filters.js:352
-#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:349
+#: templates/js/translated/table_filters.js:360
+#: templates/js/translated/table_filters.js:390
msgid "Order status"
msgstr ""
-#: templates/js/translated/table_filters.js:357
-#: templates/js/translated/table_filters.js:374
-#: templates/js/translated/table_filters.js:387
+#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:395
msgid "Outstanding"
msgstr ""
-#: templates/js/translated/table_filters.js:438
+#: templates/js/translated/table_filters.js:446
msgid "Include parts in subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:443
+#: templates/js/translated/table_filters.js:451
msgid "Show active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:451
+#: templates/js/translated/table_filters.js:459
msgid "Available stock"
msgstr ""
-#: templates/js/translated/table_filters.js:459
+#: templates/js/translated/table_filters.js:467
msgid "Has IPN"
msgstr ""
-#: templates/js/translated/table_filters.js:460
+#: templates/js/translated/table_filters.js:468
msgid "Part has internal part number"
msgstr ""
-#: templates/js/translated/table_filters.js:464
+#: templates/js/translated/table_filters.js:472
msgid "In stock"
msgstr ""
-#: templates/js/translated/table_filters.js:472
+#: templates/js/translated/table_filters.js:480
msgid "Purchasable"
msgstr ""
diff --git a/InvenTree/locale/th/LC_MESSAGES/django.po b/InvenTree/locale/th/LC_MESSAGES/django.po
index 5cdb619c8f..df0d974ca2 100644
--- a/InvenTree/locale/th/LC_MESSAGES/django.po
+++ b/InvenTree/locale/th/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-20 09:03+0000\n"
-"PO-Revision-Date: 2022-09-21 00:45\n"
+"POT-Creation-Date: 2022-09-24 13:47+0000\n"
+"PO-Revision-Date: 2022-09-25 01:07\n"
"Last-Translator: \n"
"Language-Team: Thai\n"
"Language: th_TH\n"
@@ -36,11 +36,11 @@ msgstr ""
#: order/templates/order/so_sidebar.html:17
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:172
-#: stock/models.py:1947 stock/models.py:2055 stock/serializers.py:327
+#: stock/models.py:1941 stock/models.py:2049 stock/serializers.py:327
#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823
#: stock/serializers.py:922 stock/serializers.py:1054
#: stock/templates/stock/stock_sidebar.html:25
-#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1107
+#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1121
#: templates/js/translated/company.js:1022
#: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555
#: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004
@@ -168,117 +168,117 @@ msgstr ""
msgid "Remove HTML tags from this value"
msgstr ""
-#: InvenTree/models.py:236
+#: InvenTree/models.py:238
msgid "Improperly formatted pattern"
msgstr ""
-#: InvenTree/models.py:243
+#: InvenTree/models.py:245
msgid "Unknown format key specified"
msgstr ""
-#: InvenTree/models.py:249
+#: InvenTree/models.py:251
msgid "Missing required format key"
msgstr ""
-#: InvenTree/models.py:261
+#: InvenTree/models.py:263
msgid "Reference field cannot be empty"
msgstr ""
-#: InvenTree/models.py:268
+#: InvenTree/models.py:270
msgid "Reference must match required pattern"
msgstr ""
-#: InvenTree/models.py:304
+#: InvenTree/models.py:306
msgid "Reference number is too large"
msgstr ""
-#: InvenTree/models.py:382
+#: InvenTree/models.py:384
msgid "Missing file"
msgstr ""
-#: InvenTree/models.py:383
+#: InvenTree/models.py:385
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:395 stock/models.py:2049
+#: InvenTree/models.py:405 stock/models.py:2043
#: templates/js/translated/attachment.js:103
#: templates/js/translated/attachment.js:241
msgid "Attachment"
msgstr ""
-#: InvenTree/models.py:396
+#: InvenTree/models.py:406
msgid "Select file to attach"
msgstr ""
-#: InvenTree/models.py:402 company/models.py:124 company/models.py:276
+#: InvenTree/models.py:412 company/models.py:124 company/models.py:276
#: company/models.py:511 order/models.py:84 order/models.py:1249
#: part/models.py:802 part/templates/part/part_scheduling.html:11
#: report/templates/report/inventree_build_order_base.html:164
#: templates/js/translated/company.js:691
#: templates/js/translated/company.js:1011
-#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1568
+#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567
msgid "Link"
msgstr ""
-#: InvenTree/models.py:403 build/models.py:285 part/models.py:803
-#: stock/models.py:605
+#: InvenTree/models.py:413 build/models.py:285 part/models.py:803
+#: stock/models.py:604
msgid "Link to external URL"
msgstr ""
-#: InvenTree/models.py:406 templates/js/translated/attachment.js:104
+#: InvenTree/models.py:416 templates/js/translated/attachment.js:104
#: templates/js/translated/attachment.js:285
msgid "Comment"
msgstr ""
-#: InvenTree/models.py:406
+#: InvenTree/models.py:416
msgid "File comment"
msgstr ""
-#: InvenTree/models.py:412 InvenTree/models.py:413 common/models.py:1669
-#: common/models.py:1670 common/models.py:1893 common/models.py:1894
-#: common/models.py:2156 common/models.py:2157 part/models.py:2235
-#: part/models.py:2255 plugin/models.py:260 plugin/models.py:261
+#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679
+#: common/models.py:1680 common/models.py:1903 common/models.py:1904
+#: common/models.py:2166 common/models.py:2167 part/models.py:2240
+#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2645
msgid "User"
msgstr ""
-#: InvenTree/models.py:416
+#: InvenTree/models.py:426
msgid "upload date"
msgstr ""
-#: InvenTree/models.py:438
+#: InvenTree/models.py:448
msgid "Filename must not be empty"
msgstr ""
-#: InvenTree/models.py:447
+#: InvenTree/models.py:457
msgid "Invalid attachment directory"
msgstr ""
-#: InvenTree/models.py:457
+#: InvenTree/models.py:467
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr ""
-#: InvenTree/models.py:460
+#: InvenTree/models.py:470
msgid "Filename missing extension"
msgstr ""
-#: InvenTree/models.py:467
+#: InvenTree/models.py:477
msgid "Attachment with this filename already exists"
msgstr ""
-#: InvenTree/models.py:474
+#: InvenTree/models.py:484
msgid "Error renaming file"
msgstr ""
-#: InvenTree/models.py:510
+#: InvenTree/models.py:520
msgid "Invalid choice"
msgstr ""
-#: InvenTree/models.py:547 InvenTree/models.py:548 common/models.py:1879
+#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889
#: company/models.py:358 label/models.py:101 part/models.py:746
-#: part/models.py:2413 plugin/models.py:94 report/models.py:152
+#: part/models.py:2418 plugin/models.py:94 report/models.py:152
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin.html:134
@@ -288,16 +288,16 @@ msgstr ""
#: templates/js/translated/company.js:793
#: templates/js/translated/notification.js:71
#: templates/js/translated/part.js:686 templates/js/translated/part.js:838
-#: templates/js/translated/part.js:1961 templates/js/translated/stock.js:2390
+#: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2390
msgid "Name"
msgstr ""
-#: InvenTree/models.py:554 build/models.py:163
+#: InvenTree/models.py:564 build/models.py:163
#: build/templates/build/detail.html:24 company/models.py:282
#: company/models.py:517 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
#: company/templates/company/supplier_part.html:108 label/models.py:108
-#: order/models.py:82 part/models.py:769 part/models.py:2425
+#: order/models.py:82 part/models.py:769 part/models.py:2430
#: part/templates/part/category.html:80 part/templates/part/part_base.html:172
#: part/templates/part/part_scheduling.html:12 report/models.py:165
#: report/models.py:507 report/models.py:551
@@ -305,60 +305,60 @@ msgstr ""
#: stock/templates/stock/location.html:113
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/InvenTree/settings/settings.html:358
-#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:846
-#: templates/js/translated/build.js:2512 templates/js/translated/company.js:444
+#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862
+#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444
#: templates/js/translated/company.js:702
#: templates/js/translated/company.js:986 templates/js/translated/order.js:1988
#: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831
#: templates/js/translated/part.js:745 templates/js/translated/part.js:1187
-#: templates/js/translated/part.js:1463 templates/js/translated/part.js:1997
-#: templates/js/translated/part.js:2072 templates/js/translated/stock.js:1744
+#: templates/js/translated/part.js:1462 templates/js/translated/part.js:1996
+#: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1744
#: templates/js/translated/stock.js:2422 templates/js/translated/stock.js:2482
msgid "Description"
msgstr ""
-#: InvenTree/models.py:555
+#: InvenTree/models.py:565
msgid "Description (optional)"
msgstr ""
-#: InvenTree/models.py:563
+#: InvenTree/models.py:573
msgid "parent"
msgstr ""
-#: InvenTree/models.py:570 InvenTree/models.py:571
-#: templates/js/translated/part.js:2006 templates/js/translated/stock.js:2431
+#: InvenTree/models.py:580 InvenTree/models.py:581
+#: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2431
msgid "Path"
msgstr ""
-#: InvenTree/models.py:672
+#: InvenTree/models.py:682
msgid "Barcode Data"
msgstr ""
-#: InvenTree/models.py:673
+#: InvenTree/models.py:683
msgid "Third party barcode data"
msgstr ""
-#: InvenTree/models.py:678 order/serializers.py:486
+#: InvenTree/models.py:688 order/serializers.py:486
msgid "Barcode Hash"
msgstr ""
-#: InvenTree/models.py:679
+#: InvenTree/models.py:689
msgid "Unique hash of barcode data"
msgstr ""
-#: InvenTree/models.py:724
+#: InvenTree/models.py:734
msgid "Existing barcode found"
msgstr ""
-#: InvenTree/models.py:777
+#: InvenTree/models.py:787
msgid "Server Error"
msgstr ""
-#: InvenTree/models.py:778
+#: InvenTree/models.py:788
msgid "An error has been logged by the server."
msgstr ""
-#: InvenTree/serializers.py:55 part/models.py:2741
+#: InvenTree/serializers.py:55 part/models.py:2766
msgid "Must be a valid number"
msgstr ""
@@ -538,7 +538,7 @@ msgid "InvenTree system health checks failed"
msgstr ""
#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140
-#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:334
+#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:342
msgid "Pending"
msgstr ""
@@ -660,7 +660,7 @@ msgstr ""
msgid "Converted to variant"
msgstr ""
-#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:221
+#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:229
msgid "Sent to customer"
msgstr ""
@@ -755,7 +755,7 @@ msgstr ""
#: report/templates/report/inventree_build_order_base.html:105
#: templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
-#: templates/js/translated/build.js:764
+#: templates/js/translated/build.js:780
msgid "Build Order"
msgstr ""
@@ -774,12 +774,12 @@ msgid "Build Order Reference"
msgstr ""
#: build/models.py:155 order/models.py:240 order/models.py:627
-#: order/models.py:908 part/models.py:2659
+#: order/models.py:908 part/models.py:2676
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
-#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:853
-#: templates/js/translated/build.js:1813 templates/js/translated/order.js:2251
+#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872
+#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251
#: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823
#: templates/js/translated/order.js:4331
msgid "Reference"
@@ -801,10 +801,10 @@ msgstr ""
#: build/models.py:180 build/templates/build/build_base.html:80
#: build/templates/build/detail.html:29 company/models.py:679
#: order/models.py:1005 order/models.py:1116 order/models.py:1117
-#: part/models.py:343 part/models.py:2181 part/models.py:2196
-#: part/models.py:2215 part/models.py:2233 part/models.py:2332
-#: part/models.py:2459 part/models.py:2549 part/models.py:2634
-#: part/models.py:2910 part/serializers.py:814
+#: part/models.py:343 part/models.py:2186 part/models.py:2201
+#: part/models.py:2220 part/models.py:2238 part/models.py:2337
+#: part/models.py:2464 part/models.py:2556 part/models.py:2641
+#: part/models.py:2935 part/serializers.py:828
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/upload_bom.html:52
@@ -816,10 +816,10 @@ msgstr ""
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:16
#: templates/email/overdue_build_order.html:16
-#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:552
-#: templates/js/translated/bom.js:689 templates/js/translated/bom.js:800
-#: templates/js/translated/build.js:1189 templates/js/translated/build.js:1682
-#: templates/js/translated/build.js:2126 templates/js/translated/build.js:2517
+#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:553
+#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816
+#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698
+#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547
#: templates/js/translated/company.js:301
#: templates/js/translated/company.js:531
#: templates/js/translated/company.js:643
@@ -828,7 +828,7 @@ msgstr ""
#: templates/js/translated/order.js:2205 templates/js/translated/order.js:3185
#: templates/js/translated/order.js:3581 templates/js/translated/order.js:3807
#: templates/js/translated/part.js:1172 templates/js/translated/part.js:1244
-#: templates/js/translated/part.js:1441 templates/js/translated/stock.js:586
+#: templates/js/translated/part.js:1440 templates/js/translated/stock.js:586
#: templates/js/translated/stock.js:751 templates/js/translated/stock.js:958
#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2508
#: templates/js/translated/stock.js:2703 templates/js/translated/stock.js:2837
@@ -847,8 +847,8 @@ msgstr ""
msgid "SalesOrder to which this build is allocated"
msgstr ""
-#: build/models.py:202 build/serializers.py:800
-#: templates/js/translated/build.js:2114 templates/js/translated/order.js:3173
+#: build/models.py:202 build/serializers.py:819
+#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173
msgid "Source Location"
msgstr ""
@@ -889,7 +889,7 @@ msgid "Build status code"
msgstr ""
#: build/models.py:240 build/serializers.py:225 order/serializers.py:464
-#: stock/models.py:609 templates/js/translated/order.js:1496
+#: stock/models.py:608 templates/js/translated/order.js:1496
msgid "Batch Code"
msgstr ""
@@ -911,7 +911,7 @@ msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
#: build/models.py:255 order/models.py:286
-#: templates/js/translated/build.js:2594
+#: templates/js/translated/build.js:2624
msgid "Completion Date"
msgstr ""
@@ -919,7 +919,7 @@ msgstr ""
msgid "completed by"
msgstr ""
-#: build/models.py:269 templates/js/translated/build.js:2562
+#: build/models.py:269 templates/js/translated/build.js:2592
msgid "Issued by"
msgstr ""
@@ -932,7 +932,7 @@ msgstr ""
#: order/templates/order/order_base.html:185
#: order/templates/order/sales_order_base.html:183 part/models.py:942
#: report/templates/report/inventree_build_order_base.html:158
-#: templates/js/translated/build.js:2574 templates/js/translated/order.js:2022
+#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022
msgid "Responsible"
msgstr ""
@@ -943,7 +943,7 @@ msgstr ""
#: build/models.py:284 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:188
-#: part/templates/part/part_base.html:359 stock/models.py:603
+#: part/templates/part/part_base.html:359 stock/models.py:602
#: stock/templates/stock/item_base.html:203
msgid "External Link"
msgstr ""
@@ -973,48 +973,48 @@ msgstr ""
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1158
+#: build/models.py:1167
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1167
+#: build/models.py:1176
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:1177 order/models.py:1383
+#: build/models.py:1186 order/models.py:1383
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:1183 order/models.py:1386
+#: build/models.py:1192 order/models.py:1386
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: build/models.py:1189
+#: build/models.py:1198
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1246
+#: build/models.py:1255
msgid "Selected stock item not found in BOM"
msgstr ""
-#: build/models.py:1315 stock/templates/stock/item_base.html:175
-#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2496
+#: build/models.py:1324 stock/templates/stock/item_base.html:175
+#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526
#: templates/navbar.html:38
msgid "Build"
msgstr ""
-#: build/models.py:1316
+#: build/models.py:1325
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1332 build/serializers.py:645 order/serializers.py:1035
+#: build/models.py:1341 build/serializers.py:660 order/serializers.py:1035
#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754
#: stock/serializers.py:880 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:197
-#: templates/js/translated/build.js:774 templates/js/translated/build.js:779
-#: templates/js/translated/build.js:2128 templates/js/translated/build.js:2679
+#: templates/js/translated/build.js:790 templates/js/translated/build.js:795
+#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709
#: templates/js/translated/order.js:107 templates/js/translated/order.js:3186
#: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493
#: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680
@@ -1023,18 +1023,18 @@ msgstr ""
msgid "Stock Item"
msgstr ""
-#: build/models.py:1333
+#: build/models.py:1342
msgid "Source stock item"
msgstr ""
-#: build/models.py:1345 build/serializers.py:193
+#: build/models.py:1354 build/serializers.py:193
#: build/templates/build/build_base.html:85
-#: build/templates/build/detail.html:34 common/models.py:1701
+#: build/templates/build/detail.html:34 common/models.py:1711
#: company/templates/company/supplier_part.html:341 order/models.py:901
#: order/models.py:1427 order/serializers.py:1209
#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40
-#: part/models.py:2650 part/templates/part/detail.html:951
-#: part/templates/part/detail.html:1037
+#: part/models.py:2657 part/templates/part/detail.html:950
+#: part/templates/part/detail.html:1036
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
#: report/templates/report/inventree_build_order_base.html:113
@@ -1045,39 +1045,39 @@ msgstr ""
#: stock/serializers.py:291 stock/templates/stock/item_base.html:290
#: stock/templates/stock/item_base.html:298
#: templates/email/build_order_completed.html:18
-#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:691
-#: templates/js/translated/bom.js:861 templates/js/translated/build.js:458
-#: templates/js/translated/build.js:610 templates/js/translated/build.js:801
-#: templates/js/translated/build.js:1211 templates/js/translated/build.js:1708
-#: templates/js/translated/build.js:2129
+#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:692
+#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474
+#: templates/js/translated/build.js:626 templates/js/translated/build.js:817
+#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724
+#: templates/js/translated/build.js:2159
#: templates/js/translated/model_renderers.js:120
#: templates/js/translated/order.js:123 templates/js/translated/order.js:1137
#: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490
#: templates/js/translated/order.js:3187 templates/js/translated/order.js:3507
#: templates/js/translated/order.js:3594 templates/js/translated/order.js:3686
#: templates/js/translated/order.js:3829 templates/js/translated/order.js:4337
-#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2217
-#: templates/js/translated/part.js:2686 templates/js/translated/part.js:2727
-#: templates/js/translated/part.js:2805 templates/js/translated/stock.js:458
+#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2216
+#: templates/js/translated/part.js:2685 templates/js/translated/part.js:2726
+#: templates/js/translated/part.js:2804 templates/js/translated/stock.js:458
#: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782
#: templates/js/translated/stock.js:2630 templates/js/translated/stock.js:2715
msgid "Quantity"
msgstr ""
-#: build/models.py:1346
+#: build/models.py:1355
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:1354
+#: build/models.py:1363
msgid "Install into"
msgstr ""
-#: build/models.py:1355
+#: build/models.py:1364
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:138 build/serializers.py:674
-#: templates/js/translated/build.js:1199
+#: build/serializers.py:138 build/serializers.py:689
+#: templates/js/translated/build.js:1215
msgid "Build Output"
msgstr ""
@@ -1101,9 +1101,9 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:208 build/serializers.py:665 order/models.py:318
-#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:545
-#: part/serializers.py:977 stock/models.py:463 stock/models.py:1198
+#: build/serializers.py:208 build/serializers.py:680 order/models.py:318
+#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558
+#: part/serializers.py:991 stock/models.py:462 stock/models.py:1192
#: stock/serializers.py:300
msgid "Quantity must be greater than zero"
msgstr ""
@@ -1147,8 +1147,8 @@ msgstr ""
#: stock/serializers.py:915 stock/serializers.py:1148
#: stock/templates/stock/item_base.html:388
#: templates/js/translated/barcode.js:431
-#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:786
-#: templates/js/translated/build.js:1720 templates/js/translated/order.js:1534
+#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:802
+#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534
#: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605
#: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694
#: templates/js/translated/part.js:181 templates/js/translated/stock.js:588
@@ -1164,7 +1164,7 @@ msgstr ""
#: build/serializers.py:373 build/templates/build/build_base.html:145
#: build/templates/build/detail.html:62 order/models.py:646
#: order/serializers.py:482 stock/templates/stock/item_base.html:421
-#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2546
+#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2576
#: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992
#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1827
#: templates/js/translated/stock.js:2599 templates/js/translated/stock.js:2731
@@ -1203,113 +1203,113 @@ msgstr ""
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:494
+#: build/serializers.py:509
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:496
+#: build/serializers.py:511
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:506
+#: build/serializers.py:521
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:511
+#: build/serializers.py:526
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:512
+#: build/serializers.py:527
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:522 templates/js/translated/build.js:227
+#: build/serializers.py:537 templates/js/translated/build.js:258
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:527 order/serializers.py:208 order/serializers.py:1103
+#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:528
+#: build/serializers.py:543
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:538 templates/js/translated/build.js:231
+#: build/serializers.py:553 templates/js/translated/build.js:262
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:547
+#: build/serializers.py:562 templates/js/translated/build.js:246
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:577 build/serializers.py:622 part/models.py:2768
-#: part/models.py:2902
+#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793
+#: part/models.py:2927
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:587
+#: build/serializers.py:602
msgid "Build output"
msgstr ""
-#: build/serializers.py:595
+#: build/serializers.py:610
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:636
+#: build/serializers.py:651
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:651 stock/serializers.py:767
+#: build/serializers.py:666 stock/serializers.py:767
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:709 order/serializers.py:1093
+#: build/serializers.py:724 order/serializers.py:1093
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:715
+#: build/serializers.py:730
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:722
+#: build/serializers.py:737
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:727
+#: build/serializers.py:742
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:750 order/serializers.py:1373
+#: build/serializers.py:765 order/serializers.py:1373
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:801
+#: build/serializers.py:820
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:809
+#: build/serializers.py:828
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:810
+#: build/serializers.py:829
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:815
+#: build/serializers.py:834
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:816
+#: build/serializers.py:835
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:821
+#: build/serializers.py:840
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:822
+#: build/serializers.py:841
msgid "Allow allocation of substitute parts"
msgstr ""
@@ -1400,7 +1400,7 @@ msgstr ""
#: order/templates/order/order_base.html:171
#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:125
-#: templates/js/translated/build.js:2586 templates/js/translated/order.js:2009
+#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009
#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852
#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051
msgid "Target Date"
@@ -1415,16 +1415,16 @@ msgstr ""
#: build/templates/build/build_base.html:204
#: order/templates/order/order_base.html:107
#: order/templates/order/sales_order_base.html:94
-#: templates/js/translated/table_filters.js:320
-#: templates/js/translated/table_filters.js:361
-#: templates/js/translated/table_filters.js:391
+#: templates/js/translated/table_filters.js:328
+#: templates/js/translated/table_filters.js:369
+#: templates/js/translated/table_filters.js:399
msgid "Overdue"
msgstr ""
#: build/templates/build/build_base.html:166
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
#: order/templates/order/sales_order_base.html:171
-#: templates/js/translated/table_filters.js:400
+#: templates/js/translated/table_filters.js:408
msgid "Completed"
msgstr ""
@@ -1447,7 +1447,7 @@ msgstr ""
msgid "Issued By"
msgstr ""
-#: build/templates/build/build_base.html:256
+#: build/templates/build/build_base.html:252
msgid "Delete Build Order"
msgstr ""
@@ -1478,19 +1478,19 @@ msgstr ""
#: build/templates/build/detail.html:80
#: stock/templates/stock/item_base.html:168
-#: templates/js/translated/build.js:1215
+#: templates/js/translated/build.js:1231
#: templates/js/translated/model_renderers.js:124
#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1841
#: templates/js/translated/stock.js:2738
-#: templates/js/translated/table_filters.js:159
-#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:167
+#: templates/js/translated/table_filters.js:258
msgid "Batch"
msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:158
#: order/templates/order/sales_order_base.html:158
-#: templates/js/translated/build.js:2554
+#: templates/js/translated/build.js:2584
msgid "Created"
msgstr ""
@@ -1510,7 +1510,7 @@ msgstr ""
msgid "Allocate Stock to Build"
msgstr ""
-#: build/templates/build/detail.html:176 templates/js/translated/build.js:1942
+#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967
msgid "Unallocate stock"
msgstr ""
@@ -1876,9 +1876,9 @@ msgstr ""
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:951 part/models.py:2461 report/models.py:158
+#: common/models.py:951 part/models.py:2466 report/models.py:158
#: templates/js/translated/table_filters.js:38
-#: templates/js/translated/table_filters.js:484
+#: templates/js/translated/table_filters.js:492
msgid "Template"
msgstr ""
@@ -1886,9 +1886,9 @@ msgstr ""
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1454
-#: templates/js/translated/table_filters.js:176
-#: templates/js/translated/table_filters.js:447
+#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1471
+#: templates/js/translated/table_filters.js:184
+#: templates/js/translated/table_filters.js:455
msgid "Assembly"
msgstr ""
@@ -1897,7 +1897,7 @@ msgid "Parts can be assembled from other components by default"
msgstr ""
#: common/models.py:965 part/models.py:900
-#: templates/js/translated/table_filters.js:455
+#: templates/js/translated/table_filters.js:463
msgid "Component"
msgstr ""
@@ -1914,7 +1914,7 @@ msgid "Parts are purchaseable by default"
msgstr ""
#: common/models.py:979 part/models.py:916
-#: templates/js/translated/table_filters.js:476
+#: templates/js/translated/table_filters.js:484
msgid "Salable"
msgstr ""
@@ -1924,8 +1924,8 @@ msgstr ""
#: common/models.py:986 part/models.py:906
#: templates/js/translated/table_filters.js:46
-#: templates/js/translated/table_filters.js:108
-#: templates/js/translated/table_filters.js:488
+#: templates/js/translated/table_filters.js:116
+#: templates/js/translated/table_filters.js:496
msgid "Trackable"
msgstr ""
@@ -1936,7 +1936,7 @@ msgstr ""
#: common/models.py:993 part/models.py:926
#: part/templates/part/part_base.html:156
#: templates/js/translated/table_filters.js:42
-#: templates/js/translated/table_filters.js:492
+#: templates/js/translated/table_filters.js:500
msgid "Virtual"
msgstr ""
@@ -2300,7 +2300,7 @@ msgstr ""
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1344 common/models.py:1662
+#: common/models.py:1344 common/models.py:1672
msgid "Settings key (must be unique - case insensitive"
msgstr ""
@@ -2616,101 +2616,109 @@ msgstr ""
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1702
+#: common/models.py:1647
+msgid "Table String Length"
+msgstr ""
+
+#: common/models.py:1648
+msgid "Maximimum length limit for strings displayed in table views"
+msgstr ""
+
+#: common/models.py:1712
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1709 company/serializers.py:372
+#: common/models.py:1719 company/serializers.py:372
#: company/templates/company/supplier_part.html:346 order/models.py:942
-#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2222
+#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221
msgid "Price"
msgstr ""
-#: common/models.py:1710
+#: common/models.py:1720
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1870 common/models.py:2048
+#: common/models.py:1880 common/models.py:2058
msgid "Endpoint"
msgstr ""
-#: common/models.py:1871
+#: common/models.py:1881
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1890
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1885 part/models.py:921 plugin/models.py:100
+#: common/models.py:1895 part/models.py:921 plugin/models.py:100
#: templates/js/translated/table_filters.js:34
-#: templates/js/translated/table_filters.js:104
-#: templates/js/translated/table_filters.js:316
-#: templates/js/translated/table_filters.js:442
+#: templates/js/translated/table_filters.js:112
+#: templates/js/translated/table_filters.js:324
+#: templates/js/translated/table_filters.js:450
msgid "Active"
msgstr ""
-#: common/models.py:1886
+#: common/models.py:1896
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1900
+#: common/models.py:1910
msgid "Token"
msgstr ""
-#: common/models.py:1901
+#: common/models.py:1911
msgid "Token for access"
msgstr ""
-#: common/models.py:1908
+#: common/models.py:1918
msgid "Secret"
msgstr ""
-#: common/models.py:1909
+#: common/models.py:1919
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:2015
+#: common/models.py:2025
msgid "Message ID"
msgstr ""
-#: common/models.py:2016
+#: common/models.py:2026
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:2024
+#: common/models.py:2034
msgid "Host"
msgstr ""
-#: common/models.py:2025
+#: common/models.py:2035
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:2032
+#: common/models.py:2042
msgid "Header"
msgstr ""
-#: common/models.py:2033
+#: common/models.py:2043
msgid "Header of this message"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2049
msgid "Body"
msgstr ""
-#: common/models.py:2040
+#: common/models.py:2050
msgid "Body of this message"
msgstr ""
-#: common/models.py:2049
+#: common/models.py:2059
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:2054
+#: common/models.py:2064
msgid "Worked on"
msgstr ""
-#: common/models.py:2055
+#: common/models.py:2065
msgid "Was the work on this message finished?"
msgstr ""
@@ -2859,9 +2867,9 @@ msgstr ""
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:248 company/models.py:482 stock/models.py:545
+#: company/models.py:248 company/models.py:482 stock/models.py:544
#: stock/serializers.py:85 stock/templates/stock/item_base.html:143
-#: templates/js/translated/bom.js:542
+#: templates/js/translated/bom.js:543
msgid "Base Part"
msgstr ""
@@ -2877,7 +2885,7 @@ msgstr ""
#: templates/js/translated/company.js:533
#: templates/js/translated/company.js:668
#: templates/js/translated/company.js:956 templates/js/translated/part.js:236
-#: templates/js/translated/table_filters.js:419
+#: templates/js/translated/table_filters.js:427
msgid "Manufacturer"
msgstr ""
@@ -2920,7 +2928,7 @@ msgstr ""
#: company/models.py:365
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2042 templates/js/translated/company.js:581
+#: stock/models.py:2036 templates/js/translated/company.js:581
#: templates/js/translated/company.js:799 templates/js/translated/part.js:847
#: templates/js/translated/stock.js:1360
msgid "Value"
@@ -2930,7 +2938,7 @@ msgstr ""
msgid "Parameter value"
msgstr ""
-#: company/models.py:372 part/models.py:888 part/models.py:2421
+#: company/models.py:372 part/models.py:888 part/models.py:2426
#: part/templates/part/part_base.html:286
#: templates/InvenTree/settings/settings.html:352
#: templates/js/translated/company.js:805 templates/js/translated/part.js:853
@@ -2954,7 +2962,7 @@ msgstr ""
#: templates/js/translated/company.js:436
#: templates/js/translated/company.js:929 templates/js/translated/order.js:1975
#: templates/js/translated/part.js:217 templates/js/translated/part.js:993
-#: templates/js/translated/table_filters.js:423
+#: templates/js/translated/table_filters.js:431
msgid "Supplier"
msgstr ""
@@ -2986,22 +2994,22 @@ msgid "Supplier part description"
msgstr ""
#: company/models.py:523 company/templates/company/supplier_part.html:181
-#: part/models.py:2662 part/templates/part/upload_bom.html:59
+#: part/models.py:2679 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399
msgid "Note"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "base cost"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:529 company/templates/company/supplier_part.html:167
-#: stock/models.py:571 stock/templates/stock/item_base.html:243
+#: stock/models.py:570 stock/templates/stock/item_base.html:243
#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1974
msgid "Packaging"
msgstr ""
@@ -3023,7 +3031,7 @@ msgstr ""
msgid "Unit quantity supplied in a single pack"
msgstr ""
-#: company/models.py:539 part/models.py:1771
+#: company/models.py:539 part/models.py:1776
msgid "multiple"
msgstr ""
@@ -3034,10 +3042,10 @@ msgstr ""
#: company/models.py:547 company/templates/company/supplier_part.html:115
#: templates/email/build_order_required_stock.html:19
#: templates/email/low_stock_notification.html:18
-#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1823
-#: templates/js/translated/build.js:2686 templates/js/translated/part.js:598
+#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839
+#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598
#: templates/js/translated/part.js:601
-#: templates/js/translated/table_filters.js:186
+#: templates/js/translated/table_filters.js:194
msgid "Available"
msgstr ""
@@ -3109,13 +3117,13 @@ msgid "Download image from URL"
msgstr ""
#: company/templates/company/company_base.html:86 order/models.py:641
-#: order/templates/order/sales_order_base.html:116 stock/models.py:590
-#: stock/models.py:591 stock/serializers.py:809
+#: order/templates/order/sales_order_base.html:116 stock/models.py:589
+#: stock/models.py:590 stock/serializers.py:809
#: stock/templates/stock/item_base.html:399
#: templates/email/overdue_sales_order.html:16
#: templates/js/translated/company.js:428 templates/js/translated/order.js:2813
#: templates/js/translated/stock.js:2563
-#: templates/js/translated/table_filters.js:427
+#: templates/js/translated/table_filters.js:435
msgid "Customer"
msgstr ""
@@ -3234,7 +3242,7 @@ msgid "New Sales Order"
msgstr ""
#: company/templates/company/detail.html:168
-#: templates/js/translated/build.js:1693
+#: templates/js/translated/build.js:1709
msgid "Assigned Stock"
msgstr ""
@@ -3312,7 +3320,7 @@ msgid "Delete parameters"
msgstr ""
#: company/templates/company/manufacturer_part.html:245
-#: part/templates/part/detail.html:840
+#: part/templates/part/detail.html:839
msgid "Add Parameter"
msgstr ""
@@ -3333,7 +3341,7 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:554
+#: company/templates/company/supplier_part.html:24 stock/models.py:553
#: stock/templates/stock/item_base.html:236
#: templates/js/translated/company.js:945 templates/js/translated/order.js:1135
#: templates/js/translated/stock.js:1931
@@ -3444,7 +3452,7 @@ msgstr ""
#: company/templates/company/supplier_part.html:247
#: company/templates/company/supplier_part.html:388
-#: part/templates/part/prices.html:276 templates/js/translated/part.js:2294
+#: part/templates/part/prices.html:276 templates/js/translated/part.js:2293
msgid "Add Price Break"
msgstr ""
@@ -3457,12 +3465,12 @@ msgid "No price break information found"
msgstr ""
#: company/templates/company/supplier_part.html:314
-#: templates/js/translated/part.js:2304
+#: templates/js/translated/part.js:2303
msgid "Delete Price Break"
msgstr ""
#: company/templates/company/supplier_part.html:328
-#: templates/js/translated/part.js:2318
+#: templates/js/translated/part.js:2317
msgid "Edit Price Break"
msgstr ""
@@ -3488,8 +3496,8 @@ msgstr ""
#: stock/templates/stock/stock_app_base.html:10
#: templates/InvenTree/search.html:153
#: templates/InvenTree/settings/sidebar.html:45
-#: templates/js/translated/part.js:749 templates/js/translated/part.js:1334
-#: templates/js/translated/part.js:1500 templates/js/translated/stock.js:959
+#: templates/js/translated/part.js:749 templates/js/translated/part.js:1333
+#: templates/js/translated/part.js:1499 templates/js/translated/stock.js:959
#: templates/js/translated/stock.js:1756 templates/navbar.html:31
msgid "Stock"
msgstr ""
@@ -3793,7 +3801,7 @@ msgstr ""
#: order/models.py:1013 order/templates/order/order_base.html:178
#: templates/js/translated/order.js:1641 templates/js/translated/order.js:2373
#: templates/js/translated/part.js:1087 templates/js/translated/part.js:1125
-#: templates/js/translated/table_filters.js:338
+#: templates/js/translated/table_filters.js:346
msgid "Received"
msgstr ""
@@ -3801,7 +3809,7 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:681
+#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:680
#: stock/serializers.py:169 stock/templates/stock/item_base.html:189
#: templates/js/translated/stock.js:1962
msgid "Purchase Price"
@@ -4192,8 +4200,8 @@ msgstr ""
#: part/templates/part/import_wizard/ajax_match_fields.html:64
#: part/templates/part/import_wizard/ajax_match_references.html:42
#: part/templates/part/import_wizard/match_references.html:49
-#: templates/js/translated/bom.js:77 templates/js/translated/build.js:463
-#: templates/js/translated/build.js:615 templates/js/translated/build.js:2015
+#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479
+#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040
#: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586
#: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625
#: templates/js/translated/stock.js:793
@@ -4315,8 +4323,8 @@ msgid "Pending Shipments"
msgstr ""
#: order/templates/order/sales_order_detail.html:72
-#: templates/attachment_table.html:6 templates/js/translated/bom.js:1116
-#: templates/js/translated/build.js:1923
+#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133
+#: templates/js/translated/build.js:1943
msgid "Actions"
msgstr ""
@@ -4405,9 +4413,9 @@ msgid "Available Stock"
msgstr ""
#: part/bom.py:130 part/templates/part/part_base.html:213
-#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1853
+#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890
#: templates/js/translated/part.js:588 templates/js/translated/part.js:608
-#: templates/js/translated/part.js:1337 templates/js/translated/part.js:1525
+#: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524
#: templates/js/translated/table_filters.js:68
msgid "On Order"
msgstr ""
@@ -4436,7 +4444,7 @@ msgstr ""
msgid "Icon (optional)"
msgstr ""
-#: part/models.py:122 part/models.py:2504 part/templates/part/category.html:16
+#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
@@ -4453,7 +4461,7 @@ msgstr ""
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84
#: templates/InvenTree/settings/sidebar.html:41
-#: templates/js/translated/part.js:2016 templates/js/translated/search.js:146
+#: templates/js/translated/part.js:2015 templates/js/translated/search.js:146
#: templates/navbar.html:24 users/models.py:38
msgid "Parts"
msgstr ""
@@ -4483,7 +4491,7 @@ msgstr ""
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:745 part/models.py:2558
+#: part/models.py:745 part/models.py:2565
msgid "Part name"
msgstr ""
@@ -4516,11 +4524,11 @@ msgstr ""
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:783 part/models.py:2253 part/models.py:2503
+#: part/models.py:783 part/models.py:2258 part/models.py:2508
#: part/templates/part/part_base.html:263
#: templates/InvenTree/settings/settings.html:232
#: templates/js/translated/notification.js:50
-#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1723
+#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1722
msgid "Category"
msgstr ""
@@ -4529,7 +4537,7 @@ msgid "Part category"
msgstr ""
#: part/models.py:789 part/templates/part/part_base.html:272
-#: templates/js/translated/part.js:737 templates/js/translated/part.js:1430
+#: templates/js/translated/part.js:737 templates/js/translated/part.js:1429
#: templates/js/translated/stock.js:1726
msgid "IPN"
msgstr ""
@@ -4631,249 +4639,260 @@ msgstr ""
msgid "Creation User"
msgstr ""
-#: part/models.py:1771
+#: part/models.py:1776
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2300
+#: part/models.py:2305
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2317
+#: part/models.py:2322
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2337 templates/js/translated/part.js:2067
+#: part/models.py:2342 templates/js/translated/part.js:2066
#: templates/js/translated/stock.js:1340
msgid "Test Name"
msgstr ""
-#: part/models.py:2338
+#: part/models.py:2343
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2343
+#: part/models.py:2348
msgid "Test Description"
msgstr ""
-#: part/models.py:2344
+#: part/models.py:2349
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2349 templates/js/translated/part.js:2076
-#: templates/js/translated/table_filters.js:302
+#: part/models.py:2354 templates/js/translated/part.js:2075
+#: templates/js/translated/table_filters.js:310
msgid "Required"
msgstr ""
-#: part/models.py:2350
+#: part/models.py:2355
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2355 templates/js/translated/part.js:2084
+#: part/models.py:2360 templates/js/translated/part.js:2083
msgid "Requires Value"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2361
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2361 templates/js/translated/part.js:2091
+#: part/models.py:2366 templates/js/translated/part.js:2090
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2367
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2370
+#: part/models.py:2375
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2406
+#: part/models.py:2411
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2414
+#: part/models.py:2419
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2421
+#: part/models.py:2426
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2426
+#: part/models.py:2431
msgid "Parameter description"
msgstr ""
-#: part/models.py:2459
+#: part/models.py:2464
msgid "Parent Part"
msgstr ""
-#: part/models.py:2461 part/models.py:2509 part/models.py:2510
+#: part/models.py:2466 part/models.py:2514 part/models.py:2515
#: templates/InvenTree/settings/settings.html:227
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Data"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2514 templates/InvenTree/settings/settings.html:236
+#: part/models.py:2519 templates/InvenTree/settings/settings.html:236
msgid "Default Value"
msgstr ""
-#: part/models.py:2515
+#: part/models.py:2520
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2550
+#: part/models.py:2557
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2553 templates/js/translated/model_renderers.js:212
+#: part/models.py:2560 templates/js/translated/model_renderers.js:212
msgid "Part ID"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2561
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2557
+#: part/models.py:2564
msgid "Part Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2568
msgid "Part IPN"
msgstr ""
-#: part/models.py:2562
+#: part/models.py:2569
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2565
+#: part/models.py:2572
msgid "Level"
msgstr ""
-#: part/models.py:2566
+#: part/models.py:2573
msgid "BOM level"
msgstr ""
-#: part/models.py:2635
+#: part/models.py:2642
msgid "Select parent part"
msgstr ""
-#: part/models.py:2643
+#: part/models.py:2650
msgid "Sub part"
msgstr ""
-#: part/models.py:2644
+#: part/models.py:2651
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2650
+#: part/models.py:2657
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2652 part/templates/part/upload_bom.html:58
-#: templates/js/translated/bom.js:876 templates/js/translated/bom.js:1005
-#: templates/js/translated/table_filters.js:100
+#: part/models.py:2661 part/templates/part/upload_bom.html:58
+#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999
+#: templates/js/translated/table_filters.js:84
+#: templates/js/translated/table_filters.js:108
msgid "Optional"
msgstr ""
-#: part/models.py:2652
+#: part/models.py:2662
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2655 part/templates/part/upload_bom.html:55
+#: part/models.py:2667 templates/js/translated/bom.js:895
+#: templates/js/translated/bom.js:1008
+#: templates/js/translated/table_filters.js:88
+msgid "Consumable"
+msgstr ""
+
+#: part/models.py:2668
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:2672 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2656
+#: part/models.py:2673
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2659
+#: part/models.py:2676
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2662
+#: part/models.py:2679
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "Checksum"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2668 part/templates/part/upload_bom.html:57
-#: templates/js/translated/bom.js:1022
+#: part/models.py:2685 part/templates/part/upload_bom.html:57
+#: templates/js/translated/bom.js:1025
#: templates/js/translated/table_filters.js:76
-#: templates/js/translated/table_filters.js:96
+#: templates/js/translated/table_filters.js:104
msgid "Inherited"
msgstr ""
-#: part/models.py:2669
+#: part/models.py:2686
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2674 part/templates/part/upload_bom.html:56
-#: templates/js/translated/bom.js:1014
+#: part/models.py:2691 part/templates/part/upload_bom.html:56
+#: templates/js/translated/bom.js:1017
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2675
+#: part/models.py:2692
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2753 stock/models.py:447
+#: part/models.py:2778 stock/models.py:446
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2762 part/models.py:2764
+#: part/models.py:2787 part/models.py:2789
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2869
+#: part/models.py:2894
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:2890
+#: part/models.py:2915
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:2903
+#: part/models.py:2928
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:2911
+#: part/models.py:2936
msgid "Substitute part"
msgstr ""
-#: part/models.py:2926
+#: part/models.py:2951
msgid "Part 1"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Part 2"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2948
+#: part/models.py:2973
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:2952
+#: part/models.py:2977
msgid "Duplicate relationship already exists"
msgstr ""
@@ -4881,75 +4900,75 @@ msgstr ""
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:815
+#: part/serializers.py:829
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:823
+#: part/serializers.py:837
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:824
+#: part/serializers.py:838
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:829
+#: part/serializers.py:843
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:830
+#: part/serializers.py:844
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:835
+#: part/serializers.py:849
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:836
+#: part/serializers.py:850
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:841
+#: part/serializers.py:855
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:842
+#: part/serializers.py:856
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:882
+#: part/serializers.py:896
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:883
+#: part/serializers.py:897
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:913
+#: part/serializers.py:927
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:956
+#: part/serializers.py:970
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:959
+#: part/serializers.py:973
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:962
+#: part/serializers.py:976
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:971
+#: part/serializers.py:985
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:979
+#: part/serializers.py:993
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1000
+#: part/serializers.py:1014
msgid "At least one BOM item is required"
msgstr ""
@@ -5243,22 +5262,22 @@ msgstr ""
msgid "Add Test Result Template"
msgstr ""
-#: part/templates/part/detail.html:914
+#: part/templates/part/detail.html:913
#, python-format
msgid "Purchase Unit Price - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:926
+#: part/templates/part/detail.html:925
#, python-format
msgid "Unit Price-Cost Difference - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:938
+#: part/templates/part/detail.html:937
#, python-format
msgid "Supplier Unit Cost - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:1027
+#: part/templates/part/detail.html:1026
#, python-format
msgid "Unit Price - %(currency)s"
msgstr ""
@@ -5412,7 +5431,7 @@ msgstr ""
#: part/templates/part/part_base.html:200
#: templates/js/translated/company.js:1027
-#: templates/js/translated/table_filters.js:201
+#: templates/js/translated/table_filters.js:209
msgid "In Stock"
msgstr ""
@@ -5426,13 +5445,13 @@ msgstr ""
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1043
+#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075
msgid "Can Build"
msgstr ""
#: part/templates/part/part_base.html:244 templates/js/translated/part.js:591
-#: templates/js/translated/part.js:611 templates/js/translated/part.js:1341
-#: templates/js/translated/part.js:1532
+#: templates/js/translated/part.js:611 templates/js/translated/part.js:1340
+#: templates/js/translated/part.js:1531
msgid "Building"
msgstr ""
@@ -5488,7 +5507,7 @@ msgid "Total Cost"
msgstr ""
#: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43
-#: templates/js/translated/bom.js:997
+#: templates/js/translated/bom.js:1066
msgid "No supplier pricing available"
msgstr ""
@@ -5583,7 +5602,7 @@ msgstr ""
msgid "Calculation parameters"
msgstr ""
-#: part/templates/part/prices.html:160 templates/js/translated/bom.js:991
+#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060
msgid "Supplier Cost"
msgstr ""
@@ -5622,7 +5641,7 @@ msgid "No sale pice history available for this part."
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:614
-#: templates/js/translated/part.js:1329 templates/js/translated/part.js:1331
+#: templates/js/translated/part.js:1328 templates/js/translated/part.js:1330
msgid "No Stock"
msgstr ""
@@ -5993,9 +6012,9 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:595 stock/templates/stock/item_base.html:320
-#: templates/js/translated/build.js:456 templates/js/translated/build.js:608
-#: templates/js/translated/build.js:1209 templates/js/translated/build.js:1706
+#: stock/models.py:594 stock/templates/stock/item_base.html:320
+#: templates/js/translated/build.js:472 templates/js/translated/build.js:624
+#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722
#: templates/js/translated/model_renderers.js:118
#: templates/js/translated/order.js:121 templates/js/translated/order.js:3597
#: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490
@@ -6007,12 +6026,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2030
+#: stock/models.py:2024
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2036
+#: stock/models.py:2030
msgid "Result"
msgstr ""
@@ -6047,241 +6066,241 @@ msgstr ""
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:90 stock/models.py:686
+#: stock/models.py:90 stock/models.py:685
#: stock/templates/stock/item_base.html:250
msgid "Owner"
msgstr ""
-#: stock/models.py:91 stock/models.py:687
+#: stock/models.py:91 stock/models.py:686
msgid "Select Owner"
msgstr ""
-#: stock/models.py:421
+#: stock/models.py:420
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:453 stock/serializers.py:93
+#: stock/models.py:452 stock/serializers.py:93
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:470
+#: stock/models.py:469
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:480 stock/models.py:489
+#: stock/models.py:479 stock/models.py:488
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:481
+#: stock/models.py:480
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:503
+#: stock/models.py:502
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:509
+#: stock/models.py:508
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:522
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:537
+#: stock/models.py:536
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:547
+#: stock/models.py:546
msgid "Base part"
msgstr ""
-#: stock/models.py:555
+#: stock/models.py:554
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:562 stock/templates/stock/location.html:17
+#: stock/models.py:561 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr ""
-#: stock/models.py:565
+#: stock/models.py:564
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:572
+#: stock/models.py:571
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:578 stock/templates/stock/item_base.html:359
+#: stock/models.py:577 stock/templates/stock/item_base.html:359
msgid "Installed In"
msgstr ""
-#: stock/models.py:581
+#: stock/models.py:580
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:597
+#: stock/models.py:596
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:611
+#: stock/models.py:610
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:616
+#: stock/models.py:615
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:624
msgid "Source Build"
msgstr ""
-#: stock/models.py:627
+#: stock/models.py:626
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:638
+#: stock/models.py:637
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:640
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:647
+#: stock/models.py:646
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:653 stock/templates/stock/item_base.html:427
+#: stock/models.py:652 stock/templates/stock/item_base.html:427
#: templates/js/translated/stock.js:1881
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:654
+#: stock/models.py:653
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:674 stock/templates/stock/item.html:132
+#: stock/models.py:673 stock/templates/stock/item.html:132
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:682
+#: stock/models.py:681
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:709
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1189
+#: stock/models.py:1183
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1195
+#: stock/models.py:1189
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1201
+#: stock/models.py:1195
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1204
+#: stock/models.py:1198
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1207
+#: stock/models.py:1201
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1214
+#: stock/models.py:1208
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1284
+#: stock/models.py:1278
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1287
+#: stock/models.py:1281
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1290
+#: stock/models.py:1284
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1293
+#: stock/models.py:1287
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1296
+#: stock/models.py:1290
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1299
+#: stock/models.py:1293
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1306 stock/serializers.py:959
+#: stock/models.py:1300 stock/serializers.py:959
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1310
+#: stock/models.py:1304
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1314
+#: stock/models.py:1308
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1318
+#: stock/models.py:1312
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1487
+#: stock/models.py:1481
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:1948
+#: stock/models.py:1942
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2006
+#: stock/models.py:2000
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2012
+#: stock/models.py:2006
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2031
+#: stock/models.py:2025
msgid "Test name"
msgstr ""
-#: stock/models.py:2037
+#: stock/models.py:2031
msgid "Test result"
msgstr ""
-#: stock/models.py:2043
+#: stock/models.py:2037
msgid "Test output value"
msgstr ""
-#: stock/models.py:2050
+#: stock/models.py:2044
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2056
+#: stock/models.py:2050
msgid "Test notes"
msgstr ""
@@ -6599,7 +6618,7 @@ msgid "Available Quantity"
msgstr ""
#: stock/templates/stock/item_base.html:392
-#: templates/js/translated/build.js:1729
+#: templates/js/translated/build.js:1745
msgid "No location set"
msgstr ""
@@ -6613,7 +6632,7 @@ msgid "This StockItem expired on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:431
-#: templates/js/translated/table_filters.js:269
+#: templates/js/translated/table_filters.js:277
msgid "Expired"
msgstr ""
@@ -6623,7 +6642,7 @@ msgid "This StockItem expires on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:433
-#: templates/js/translated/table_filters.js:275
+#: templates/js/translated/table_filters.js:283
msgid "Stale"
msgstr ""
@@ -7433,64 +7452,64 @@ msgstr ""
msgid "Do you really want to remove the selected email address?"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:27
+#: templates/InvenTree/settings/user_display.html:28
msgid "Theme Settings"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:37
+#: templates/InvenTree/settings/user_display.html:38
msgid "Select theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:48
+#: templates/InvenTree/settings/user_display.html:49
msgid "Set Theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:56
+#: templates/InvenTree/settings/user_display.html:57
msgid "Language Settings"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:65
+#: templates/InvenTree/settings/user_display.html:66
msgid "Select language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:81
+#: templates/InvenTree/settings/user_display.html:82
#, python-format
msgid "%(lang_translated)s%% translated"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:83
+#: templates/InvenTree/settings/user_display.html:84
msgid "No translations available"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:90
+#: templates/InvenTree/settings/user_display.html:91
msgid "Set Language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:93
+#: templates/InvenTree/settings/user_display.html:94
msgid "Some languages are not complete"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:95
+#: templates/InvenTree/settings/user_display.html:96
msgid "Show only sufficent"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "and hidden."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "Show them too"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:104
+#: templates/InvenTree/settings/user_display.html:105
msgid "Help the translation efforts!"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:105
+#: templates/InvenTree/settings/user_display.html:106
msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:106
+#: templates/InvenTree/settings/user_display.html:107
msgid "InvenTree Translation Project"
msgstr ""
@@ -7787,7 +7806,7 @@ msgid "The following parts are low on required stock"
msgstr ""
#: templates/email/build_order_required_stock.html:18
-#: templates/js/translated/bom.js:1489
+#: templates/js/translated/bom.js:1506
msgid "Required Quantity"
msgstr ""
@@ -7801,7 +7820,7 @@ msgid "Click on the following link to view this part"
msgstr ""
#: templates/email/low_stock_notification.html:19
-#: templates/js/translated/part.js:2563
+#: templates/js/translated/part.js:2562
msgid "Minimum Quantity"
msgstr ""
@@ -7999,7 +8018,7 @@ msgstr ""
msgid "Row Data"
msgstr ""
-#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:620
+#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
#: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601
#: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003
#: templates/js/translated/order.js:1179 templates/modals.html:15
@@ -8069,117 +8088,118 @@ msgstr ""
msgid "Include part supplier data in exported BOM"
msgstr ""
-#: templates/js/translated/bom.js:511
+#: templates/js/translated/bom.js:512
msgid "Remove substitute part"
msgstr ""
-#: templates/js/translated/bom.js:565
+#: templates/js/translated/bom.js:566
msgid "Select and add a new substitute part using the input below"
msgstr ""
-#: templates/js/translated/bom.js:576
+#: templates/js/translated/bom.js:577
msgid "Are you sure you wish to remove this substitute part link?"
msgstr ""
-#: templates/js/translated/bom.js:582
+#: templates/js/translated/bom.js:583
msgid "Remove Substitute Part"
msgstr ""
-#: templates/js/translated/bom.js:621
+#: templates/js/translated/bom.js:622
msgid "Add Substitute"
msgstr ""
-#: templates/js/translated/bom.js:622
+#: templates/js/translated/bom.js:623
msgid "Edit BOM Item Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:684
+#: templates/js/translated/bom.js:685
msgid "All selected BOM items will be deleted"
msgstr ""
-#: templates/js/translated/bom.js:700
+#: templates/js/translated/bom.js:701
msgid "Delete selected BOM items?"
msgstr ""
-#: templates/js/translated/bom.js:819
+#: templates/js/translated/bom.js:835
msgid "Load BOM for subassembly"
msgstr ""
-#: templates/js/translated/bom.js:829
+#: templates/js/translated/bom.js:845
msgid "Substitutes Available"
msgstr ""
-#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1805
+#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821
msgid "Variant stock allowed"
msgstr ""
-#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1857
+#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872
#: templates/js/translated/order.js:3932
msgid "No Stock Available"
msgstr ""
-#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1861
+#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876
msgid "Includes variant and substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1863
-#: templates/js/translated/part.js:761 templates/js/translated/part.js:1538
+#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878
+#: templates/js/translated/part.js:761 templates/js/translated/part.js:1537
msgid "Includes variant stock"
msgstr ""
-#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1865
+#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880
msgid "Includes substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:962
+#: templates/js/translated/bom.js:985
msgid "Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:977
-msgid "Purchase Price Range"
-msgstr ""
-
-#: templates/js/translated/bom.js:984
-msgid "Purchase Price Average"
-msgstr ""
-
-#: templates/js/translated/bom.js:1033 templates/js/translated/bom.js:1153
+#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170
msgid "View BOM"
msgstr ""
-#: templates/js/translated/bom.js:1060
-msgid "Including On Order"
+#: templates/js/translated/bom.js:1046
+msgid "Purchase Price Range"
msgstr ""
-#: templates/js/translated/bom.js:1124
+#: templates/js/translated/bom.js:1053
+msgid "Purchase Price Average"
+msgstr ""
+
+#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863
+#: templates/js/translated/build.js:1947
+msgid "Consumable item"
+msgstr ""
+
+#: templates/js/translated/bom.js:1141
msgid "Validate BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1126
+#: templates/js/translated/bom.js:1143
msgid "This line has been validated"
msgstr ""
-#: templates/js/translated/bom.js:1128
+#: templates/js/translated/bom.js:1145
msgid "Edit substitute parts"
msgstr ""
-#: templates/js/translated/bom.js:1130 templates/js/translated/bom.js:1292
+#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1309
msgid "Edit BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1132
+#: templates/js/translated/bom.js:1149
msgid "Delete BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1650
+#: templates/js/translated/bom.js:1245 templates/js/translated/build.js:1666
msgid "No BOM items found"
msgstr ""
-#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1789
+#: templates/js/translated/bom.js:1489 templates/js/translated/build.js:1805
msgid "Required Part"
msgstr ""
-#: templates/js/translated/bom.js:1498
+#: templates/js/translated/bom.js:1515
msgid "Inherited from parent BOM"
msgstr ""
@@ -8207,256 +8227,260 @@ msgstr ""
msgid "There are incomplete outputs remaining for this build order"
msgstr ""
-#: templates/js/translated/build.js:217
+#: templates/js/translated/build.js:239
msgid "Build order is ready to be completed"
msgstr ""
-#: templates/js/translated/build.js:222
+#: templates/js/translated/build.js:247
+msgid "This build order cannot be completed as there are incomplete outputs"
+msgstr ""
+
+#: templates/js/translated/build.js:252
msgid "Build Order is incomplete"
msgstr ""
-#: templates/js/translated/build.js:254
+#: templates/js/translated/build.js:270
msgid "Complete Build Order"
msgstr ""
-#: templates/js/translated/build.js:295 templates/js/translated/stock.js:92
+#: templates/js/translated/build.js:311 templates/js/translated/stock.js:92
#: templates/js/translated/stock.js:214
msgid "Next available serial number"
msgstr ""
-#: templates/js/translated/build.js:297 templates/js/translated/stock.js:94
+#: templates/js/translated/build.js:313 templates/js/translated/stock.js:94
#: templates/js/translated/stock.js:216
msgid "Latest serial number"
msgstr ""
-#: templates/js/translated/build.js:306
+#: templates/js/translated/build.js:322
msgid "The Bill of Materials contains trackable parts"
msgstr ""
-#: templates/js/translated/build.js:307
+#: templates/js/translated/build.js:323
msgid "Build outputs must be generated individually"
msgstr ""
-#: templates/js/translated/build.js:315
+#: templates/js/translated/build.js:331
msgid "Trackable parts can have serial numbers specified"
msgstr ""
-#: templates/js/translated/build.js:316
+#: templates/js/translated/build.js:332
msgid "Enter serial numbers to generate multiple single build outputs"
msgstr ""
-#: templates/js/translated/build.js:323
+#: templates/js/translated/build.js:339
msgid "Create Build Output"
msgstr ""
-#: templates/js/translated/build.js:354
+#: templates/js/translated/build.js:370
msgid "Allocate stock items to this build output"
msgstr ""
-#: templates/js/translated/build.js:365
+#: templates/js/translated/build.js:381
msgid "Unallocate stock from build output"
msgstr ""
-#: templates/js/translated/build.js:374
+#: templates/js/translated/build.js:390
msgid "Complete build output"
msgstr ""
-#: templates/js/translated/build.js:382
+#: templates/js/translated/build.js:398
msgid "Delete build output"
msgstr ""
-#: templates/js/translated/build.js:405
+#: templates/js/translated/build.js:421
msgid "Are you sure you wish to unallocate stock items from this build?"
msgstr ""
-#: templates/js/translated/build.js:423
+#: templates/js/translated/build.js:439
msgid "Unallocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:443 templates/js/translated/build.js:595
+#: templates/js/translated/build.js:459 templates/js/translated/build.js:611
msgid "Select Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:444 templates/js/translated/build.js:596
+#: templates/js/translated/build.js:460 templates/js/translated/build.js:612
msgid "At least one build output must be selected"
msgstr ""
-#: templates/js/translated/build.js:498 templates/js/translated/build.js:650
+#: templates/js/translated/build.js:514 templates/js/translated/build.js:666
msgid "Output"
msgstr ""
-#: templates/js/translated/build.js:516
+#: templates/js/translated/build.js:532
msgid "Complete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:663
+#: templates/js/translated/build.js:679
msgid "Delete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:753
+#: templates/js/translated/build.js:769
msgid "No build order allocations found"
msgstr ""
-#: templates/js/translated/build.js:790
+#: templates/js/translated/build.js:806
msgid "Location not specified"
msgstr ""
-#: templates/js/translated/build.js:1169
+#: templates/js/translated/build.js:1185
msgid "No active build outputs found"
msgstr ""
-#: templates/js/translated/build.js:1238
+#: templates/js/translated/build.js:1254
msgid "Allocated Stock"
msgstr ""
-#: templates/js/translated/build.js:1245
+#: templates/js/translated/build.js:1261
msgid "No tracked BOM items for this build"
msgstr ""
-#: templates/js/translated/build.js:1267
+#: templates/js/translated/build.js:1283
msgid "Completed Tests"
msgstr ""
-#: templates/js/translated/build.js:1272
+#: templates/js/translated/build.js:1288
msgid "No required tests for this build"
msgstr ""
-#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2697
+#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727
#: templates/js/translated/order.js:3632
msgid "Edit stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1748 templates/js/translated/build.js:2698
+#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728
#: templates/js/translated/order.js:3633
msgid "Delete stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1766
+#: templates/js/translated/build.js:1782
msgid "Edit Allocation"
msgstr ""
-#: templates/js/translated/build.js:1776
+#: templates/js/translated/build.js:1792
msgid "Remove Allocation"
msgstr ""
-#: templates/js/translated/build.js:1801
+#: templates/js/translated/build.js:1817
msgid "Substitute parts available"
msgstr ""
-#: templates/js/translated/build.js:1818
+#: templates/js/translated/build.js:1834
msgid "Quantity Per"
msgstr ""
-#: templates/js/translated/build.js:1847 templates/js/translated/order.js:3939
+#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939
msgid "Insufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1849 templates/js/translated/order.js:3937
+#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937
msgid "Sufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1882 templates/js/translated/build.js:2127
-#: templates/js/translated/build.js:2693 templates/js/translated/order.js:3951
+#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157
+#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1930 templates/js/translated/order.js:4031
+#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031
msgid "Build stock"
msgstr ""
-#: templates/js/translated/build.js:1934 templates/stock_table.html:50
+#: templates/js/translated/build.js:1959 templates/stock_table.html:50
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1937 templates/js/translated/order.js:4024
+#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024
msgid "Allocate stock"
msgstr ""
-#: templates/js/translated/build.js:1976 templates/js/translated/label.js:172
+#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172
#: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1977 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2026 templates/js/translated/order.js:3108
+#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108
msgid "Specify stock allocation quantity"
msgstr ""
-#: templates/js/translated/build.js:2100
+#: templates/js/translated/build.js:2130
msgid "All Parts Allocated"
msgstr ""
-#: templates/js/translated/build.js:2101
+#: templates/js/translated/build.js:2131
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2115 templates/js/translated/order.js:3174
+#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
-#: templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2173
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2154 templates/js/translated/order.js:3271
+#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2226 templates/js/translated/order.js:3348
+#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348
msgid "No matching stock items"
msgstr ""
-#: templates/js/translated/build.js:2323
+#: templates/js/translated/build.js:2353
msgid "Automatic Stock Allocation"
msgstr ""
-#: templates/js/translated/build.js:2324
+#: templates/js/translated/build.js:2354
msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines"
msgstr ""
-#: templates/js/translated/build.js:2326
+#: templates/js/translated/build.js:2356
msgid "If a location is specifed, stock will only be allocated from that location"
msgstr ""
-#: templates/js/translated/build.js:2327
+#: templates/js/translated/build.js:2357
msgid "If stock is considered interchangeable, it will be allocated from the first location it is found"
msgstr ""
-#: templates/js/translated/build.js:2328
+#: templates/js/translated/build.js:2358
msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found"
msgstr ""
-#: templates/js/translated/build.js:2349
+#: templates/js/translated/build.js:2379
msgid "Allocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:2455
+#: templates/js/translated/build.js:2485
msgid "No builds matching query"
msgstr ""
-#: templates/js/translated/build.js:2490 templates/js/translated/part.js:1422
-#: templates/js/translated/part.js:1954 templates/js/translated/stock.js:1686
+#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421
+#: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686
#: templates/js/translated/stock.js:2384
msgid "Select"
msgstr ""
-#: templates/js/translated/build.js:2504
+#: templates/js/translated/build.js:2534
msgid "Build order is overdue"
msgstr ""
-#: templates/js/translated/build.js:2532
+#: templates/js/translated/build.js:2562
msgid "Progress"
msgstr ""
-#: templates/js/translated/build.js:2568 templates/js/translated/stock.js:2651
+#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2651
msgid "No user information"
msgstr ""
-#: templates/js/translated/build.js:2674
+#: templates/js/translated/build.js:2704
msgid "No parts allocated for"
msgstr ""
@@ -8644,23 +8668,23 @@ msgstr ""
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1922 templates/search.html:29
+#: templates/js/translated/forms.js:1923 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2175
+#: templates/js/translated/forms.js:2176
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2653
+#: templates/js/translated/forms.js:2654
msgid "Select Columns"
msgstr ""
@@ -8672,7 +8696,7 @@ msgstr ""
msgid "NO"
msgstr ""
-#: templates/js/translated/helpers.js:362
+#: templates/js/translated/helpers.js:363
msgid "Notes updated"
msgstr ""
@@ -9091,7 +9115,7 @@ msgstr ""
#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2503
#: templates/js/translated/order.js:3842 templates/js/translated/order.js:4350
-#: templates/js/translated/part.js:2196 templates/js/translated/part.js:2794
+#: templates/js/translated/part.js:2195 templates/js/translated/part.js:2793
msgid "Unit Price"
msgstr ""
@@ -9446,8 +9470,8 @@ msgstr ""
msgid "Copy Bill of Materials"
msgstr ""
-#: templates/js/translated/part.js:584 templates/js/translated/part.js:1520
-#: templates/js/translated/table_filters.js:468
+#: templates/js/translated/part.js:584 templates/js/translated/part.js:1519
+#: templates/js/translated/table_filters.js:476
msgid "Low stock"
msgstr ""
@@ -9483,140 +9507,140 @@ msgstr ""
msgid "Delete Part Relationship"
msgstr ""
-#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1608
+#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1607
msgid "No parts found"
msgstr ""
-#: templates/js/translated/part.js:1487
+#: templates/js/translated/part.js:1486
msgid "No category"
msgstr ""
-#: templates/js/translated/part.js:1518
+#: templates/js/translated/part.js:1517
msgid "No stock"
msgstr ""
-#: templates/js/translated/part.js:1542
+#: templates/js/translated/part.js:1541
msgid "Allocated to build orders"
msgstr ""
-#: templates/js/translated/part.js:1546
+#: templates/js/translated/part.js:1545
msgid "Allocated to sales orders"
msgstr ""
-#: templates/js/translated/part.js:1632 templates/js/translated/part.js:1875
+#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1874
#: templates/js/translated/stock.js:2345
msgid "Display as list"
msgstr ""
-#: templates/js/translated/part.js:1648
+#: templates/js/translated/part.js:1647
msgid "Display as grid"
msgstr ""
-#: templates/js/translated/part.js:1714
+#: templates/js/translated/part.js:1713
msgid "Set the part category for the selected parts"
msgstr ""
-#: templates/js/translated/part.js:1719
+#: templates/js/translated/part.js:1718
msgid "Set Part Category"
msgstr ""
-#: templates/js/translated/part.js:1724
+#: templates/js/translated/part.js:1723
msgid "Select Part Category"
msgstr ""
-#: templates/js/translated/part.js:1737
+#: templates/js/translated/part.js:1736
msgid "Category is required"
msgstr ""
-#: templates/js/translated/part.js:1894 templates/js/translated/stock.js:2364
+#: templates/js/translated/part.js:1893 templates/js/translated/stock.js:2364
msgid "Display as tree"
msgstr ""
-#: templates/js/translated/part.js:1973
+#: templates/js/translated/part.js:1972
msgid "Load Subcategories"
msgstr ""
-#: templates/js/translated/part.js:1989
+#: templates/js/translated/part.js:1988
msgid "Subscribed category"
msgstr ""
-#: templates/js/translated/part.js:2053
+#: templates/js/translated/part.js:2052
msgid "No test templates matching query"
msgstr ""
-#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1299
+#: templates/js/translated/part.js:2103 templates/js/translated/stock.js:1299
msgid "Edit test result"
msgstr ""
-#: templates/js/translated/part.js:2105 templates/js/translated/stock.js:1300
+#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1300
#: templates/js/translated/stock.js:1560
msgid "Delete test result"
msgstr ""
-#: templates/js/translated/part.js:2111
+#: templates/js/translated/part.js:2110
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/translated/part.js:2133
+#: templates/js/translated/part.js:2132
msgid "Edit Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2147
+#: templates/js/translated/part.js:2146
msgid "Delete Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2172
+#: templates/js/translated/part.js:2171
#, python-brace-format
msgid "No ${human_name} information found"
msgstr ""
-#: templates/js/translated/part.js:2229
+#: templates/js/translated/part.js:2228
#, python-brace-format
msgid "Edit ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2230
+#: templates/js/translated/part.js:2229
#, python-brace-format
msgid "Delete ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2395 templates/js/translated/part.js:2396
+#: templates/js/translated/part.js:2394 templates/js/translated/part.js:2395
msgid "No date specified"
msgstr ""
-#: templates/js/translated/part.js:2398
+#: templates/js/translated/part.js:2397
msgid "Specified date is in the past"
msgstr ""
-#: templates/js/translated/part.js:2404
+#: templates/js/translated/part.js:2403
msgid "Speculative"
msgstr ""
-#: templates/js/translated/part.js:2454
+#: templates/js/translated/part.js:2453
msgid "No scheduling information available for this part"
msgstr ""
-#: templates/js/translated/part.js:2460
+#: templates/js/translated/part.js:2459
msgid "Error fetching scheduling information for this part"
msgstr ""
-#: templates/js/translated/part.js:2556
+#: templates/js/translated/part.js:2555
msgid "Scheduled Stock Quantities"
msgstr ""
-#: templates/js/translated/part.js:2572
+#: templates/js/translated/part.js:2571
msgid "Maximum Quantity"
msgstr ""
-#: templates/js/translated/part.js:2617
+#: templates/js/translated/part.js:2616
msgid "Minimum Stock Level"
msgstr ""
-#: templates/js/translated/part.js:2718
+#: templates/js/translated/part.js:2717
msgid "Single Price"
msgstr ""
-#: templates/js/translated/part.js:2737
+#: templates/js/translated/part.js:2736
msgid "Single Price Difference"
msgstr ""
@@ -9979,7 +10003,7 @@ msgid "Stock item is destroyed"
msgstr ""
#: templates/js/translated/stock.js:1816
-#: templates/js/translated/table_filters.js:196
+#: templates/js/translated/table_filters.js:204
msgid "Depleted"
msgstr ""
@@ -10103,215 +10127,215 @@ msgstr ""
msgid "Allow Variant Stock"
msgstr ""
-#: templates/js/translated/table_filters.js:118
-#: templates/js/translated/table_filters.js:191
+#: templates/js/translated/table_filters.js:126
+#: templates/js/translated/table_filters.js:199
msgid "Include sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:119
+#: templates/js/translated/table_filters.js:127
msgid "Include locations"
msgstr ""
-#: templates/js/translated/table_filters.js:129
-#: templates/js/translated/table_filters.js:130
-#: templates/js/translated/table_filters.js:437
+#: templates/js/translated/table_filters.js:137
+#: templates/js/translated/table_filters.js:138
+#: templates/js/translated/table_filters.js:445
msgid "Include subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:134
-#: templates/js/translated/table_filters.js:480
+#: templates/js/translated/table_filters.js:142
+#: templates/js/translated/table_filters.js:488
msgid "Subscribed"
msgstr ""
-#: templates/js/translated/table_filters.js:144
-#: templates/js/translated/table_filters.js:226
+#: templates/js/translated/table_filters.js:152
+#: templates/js/translated/table_filters.js:234
msgid "Is Serialized"
msgstr ""
-#: templates/js/translated/table_filters.js:147
-#: templates/js/translated/table_filters.js:233
+#: templates/js/translated/table_filters.js:155
+#: templates/js/translated/table_filters.js:241
msgid "Serial number GTE"
msgstr ""
-#: templates/js/translated/table_filters.js:148
-#: templates/js/translated/table_filters.js:234
+#: templates/js/translated/table_filters.js:156
+#: templates/js/translated/table_filters.js:242
msgid "Serial number greater than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:151
-#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:159
+#: templates/js/translated/table_filters.js:245
msgid "Serial number LTE"
msgstr ""
-#: templates/js/translated/table_filters.js:152
-#: templates/js/translated/table_filters.js:238
+#: templates/js/translated/table_filters.js:160
+#: templates/js/translated/table_filters.js:246
msgid "Serial number less than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:155
-#: templates/js/translated/table_filters.js:156
-#: templates/js/translated/table_filters.js:229
-#: templates/js/translated/table_filters.js:230
+#: templates/js/translated/table_filters.js:163
+#: templates/js/translated/table_filters.js:164
+#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:238
msgid "Serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:160
-#: templates/js/translated/table_filters.js:251
+#: templates/js/translated/table_filters.js:168
+#: templates/js/translated/table_filters.js:259
msgid "Batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:171
-#: templates/js/translated/table_filters.js:409
+#: templates/js/translated/table_filters.js:179
+#: templates/js/translated/table_filters.js:417
msgid "Active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:172
+#: templates/js/translated/table_filters.js:180
msgid "Show stock for active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:177
+#: templates/js/translated/table_filters.js:185
msgid "Part is an assembly"
msgstr ""
-#: templates/js/translated/table_filters.js:181
+#: templates/js/translated/table_filters.js:189
msgid "Is allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:182
+#: templates/js/translated/table_filters.js:190
msgid "Item has been allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:187
+#: templates/js/translated/table_filters.js:195
msgid "Stock is available for use"
msgstr ""
-#: templates/js/translated/table_filters.js:192
+#: templates/js/translated/table_filters.js:200
msgid "Include stock in sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:197
+#: templates/js/translated/table_filters.js:205
msgid "Show stock items which are depleted"
msgstr ""
-#: templates/js/translated/table_filters.js:202
+#: templates/js/translated/table_filters.js:210
msgid "Show items which are in stock"
msgstr ""
-#: templates/js/translated/table_filters.js:206
+#: templates/js/translated/table_filters.js:214
msgid "In Production"
msgstr ""
-#: templates/js/translated/table_filters.js:207
+#: templates/js/translated/table_filters.js:215
msgid "Show items which are in production"
msgstr ""
-#: templates/js/translated/table_filters.js:211
+#: templates/js/translated/table_filters.js:219
msgid "Include Variants"
msgstr ""
-#: templates/js/translated/table_filters.js:212
+#: templates/js/translated/table_filters.js:220
msgid "Include stock items for variant parts"
msgstr ""
-#: templates/js/translated/table_filters.js:216
+#: templates/js/translated/table_filters.js:224
msgid "Installed"
msgstr ""
-#: templates/js/translated/table_filters.js:217
+#: templates/js/translated/table_filters.js:225
msgid "Show stock items which are installed in another item"
msgstr ""
-#: templates/js/translated/table_filters.js:222
+#: templates/js/translated/table_filters.js:230
msgid "Show items which have been assigned to a customer"
msgstr ""
-#: templates/js/translated/table_filters.js:242
-#: templates/js/translated/table_filters.js:243
+#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:251
msgid "Stock status"
msgstr ""
-#: templates/js/translated/table_filters.js:246
+#: templates/js/translated/table_filters.js:254
msgid "Has batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:254
+#: templates/js/translated/table_filters.js:262
msgid "Tracked"
msgstr ""
-#: templates/js/translated/table_filters.js:255
+#: templates/js/translated/table_filters.js:263
msgid "Stock item is tracked by either batch code or serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:260
+#: templates/js/translated/table_filters.js:268
msgid "Has purchase price"
msgstr ""
-#: templates/js/translated/table_filters.js:261
+#: templates/js/translated/table_filters.js:269
msgid "Show stock items which have a purchase price set"
msgstr ""
-#: templates/js/translated/table_filters.js:270
+#: templates/js/translated/table_filters.js:278
msgid "Show stock items which have expired"
msgstr ""
-#: templates/js/translated/table_filters.js:276
+#: templates/js/translated/table_filters.js:284
msgid "Show stock which is close to expiring"
msgstr ""
-#: templates/js/translated/table_filters.js:288
+#: templates/js/translated/table_filters.js:296
msgid "Test Passed"
msgstr ""
-#: templates/js/translated/table_filters.js:292
+#: templates/js/translated/table_filters.js:300
msgid "Include Installed Items"
msgstr ""
-#: templates/js/translated/table_filters.js:311
+#: templates/js/translated/table_filters.js:319
msgid "Build status"
msgstr ""
-#: templates/js/translated/table_filters.js:324
-#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:332
+#: templates/js/translated/table_filters.js:373
msgid "Assigned to me"
msgstr ""
-#: templates/js/translated/table_filters.js:341
-#: templates/js/translated/table_filters.js:352
-#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:349
+#: templates/js/translated/table_filters.js:360
+#: templates/js/translated/table_filters.js:390
msgid "Order status"
msgstr ""
-#: templates/js/translated/table_filters.js:357
-#: templates/js/translated/table_filters.js:374
-#: templates/js/translated/table_filters.js:387
+#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:395
msgid "Outstanding"
msgstr ""
-#: templates/js/translated/table_filters.js:438
+#: templates/js/translated/table_filters.js:446
msgid "Include parts in subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:443
+#: templates/js/translated/table_filters.js:451
msgid "Show active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:451
+#: templates/js/translated/table_filters.js:459
msgid "Available stock"
msgstr ""
-#: templates/js/translated/table_filters.js:459
+#: templates/js/translated/table_filters.js:467
msgid "Has IPN"
msgstr ""
-#: templates/js/translated/table_filters.js:460
+#: templates/js/translated/table_filters.js:468
msgid "Part has internal part number"
msgstr ""
-#: templates/js/translated/table_filters.js:464
+#: templates/js/translated/table_filters.js:472
msgid "In stock"
msgstr ""
-#: templates/js/translated/table_filters.js:472
+#: templates/js/translated/table_filters.js:480
msgid "Purchasable"
msgstr ""
diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po
index 8e434a509f..be494ee3bd 100644
--- a/InvenTree/locale/tr/LC_MESSAGES/django.po
+++ b/InvenTree/locale/tr/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-20 09:03+0000\n"
-"PO-Revision-Date: 2022-09-21 00:45\n"
+"POT-Creation-Date: 2022-09-24 13:47+0000\n"
+"PO-Revision-Date: 2022-09-25 01:07\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Language: tr_TR\n"
@@ -36,11 +36,11 @@ msgstr "Tarih giriniz"
#: order/templates/order/so_sidebar.html:17
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:172
-#: stock/models.py:1947 stock/models.py:2055 stock/serializers.py:327
+#: stock/models.py:1941 stock/models.py:2049 stock/serializers.py:327
#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823
#: stock/serializers.py:922 stock/serializers.py:1054
#: stock/templates/stock/stock_sidebar.html:25
-#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1107
+#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1121
#: templates/js/translated/company.js:1022
#: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555
#: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004
@@ -168,117 +168,117 @@ msgstr ""
msgid "Remove HTML tags from this value"
msgstr ""
-#: InvenTree/models.py:236
+#: InvenTree/models.py:238
msgid "Improperly formatted pattern"
msgstr ""
-#: InvenTree/models.py:243
+#: InvenTree/models.py:245
msgid "Unknown format key specified"
msgstr ""
-#: InvenTree/models.py:249
+#: InvenTree/models.py:251
msgid "Missing required format key"
msgstr ""
-#: InvenTree/models.py:261
+#: InvenTree/models.py:263
msgid "Reference field cannot be empty"
msgstr ""
-#: InvenTree/models.py:268
+#: InvenTree/models.py:270
msgid "Reference must match required pattern"
msgstr ""
-#: InvenTree/models.py:304
+#: InvenTree/models.py:306
msgid "Reference number is too large"
msgstr ""
-#: InvenTree/models.py:382
+#: InvenTree/models.py:384
msgid "Missing file"
msgstr "Eksik dosya"
-#: InvenTree/models.py:383
+#: InvenTree/models.py:385
msgid "Missing external link"
msgstr "Bozuk dış bağlantı"
-#: InvenTree/models.py:395 stock/models.py:2049
+#: InvenTree/models.py:405 stock/models.py:2043
#: templates/js/translated/attachment.js:103
#: templates/js/translated/attachment.js:241
msgid "Attachment"
msgstr "Ek"
-#: InvenTree/models.py:396
+#: InvenTree/models.py:406
msgid "Select file to attach"
msgstr "Eklenecek dosyayı seç"
-#: InvenTree/models.py:402 company/models.py:124 company/models.py:276
+#: InvenTree/models.py:412 company/models.py:124 company/models.py:276
#: company/models.py:511 order/models.py:84 order/models.py:1249
#: part/models.py:802 part/templates/part/part_scheduling.html:11
#: report/templates/report/inventree_build_order_base.html:164
#: templates/js/translated/company.js:691
#: templates/js/translated/company.js:1011
-#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1568
+#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567
msgid "Link"
msgstr "Bağlantı"
-#: InvenTree/models.py:403 build/models.py:285 part/models.py:803
-#: stock/models.py:605
+#: InvenTree/models.py:413 build/models.py:285 part/models.py:803
+#: stock/models.py:604
msgid "Link to external URL"
msgstr "Harici URL'ye bağlantı"
-#: InvenTree/models.py:406 templates/js/translated/attachment.js:104
+#: InvenTree/models.py:416 templates/js/translated/attachment.js:104
#: templates/js/translated/attachment.js:285
msgid "Comment"
msgstr "Yorum"
-#: InvenTree/models.py:406
+#: InvenTree/models.py:416
msgid "File comment"
msgstr "Dosya yorumu"
-#: InvenTree/models.py:412 InvenTree/models.py:413 common/models.py:1669
-#: common/models.py:1670 common/models.py:1893 common/models.py:1894
-#: common/models.py:2156 common/models.py:2157 part/models.py:2235
-#: part/models.py:2255 plugin/models.py:260 plugin/models.py:261
+#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679
+#: common/models.py:1680 common/models.py:1903 common/models.py:1904
+#: common/models.py:2166 common/models.py:2167 part/models.py:2240
+#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2645
msgid "User"
msgstr "Kullanıcı"
-#: InvenTree/models.py:416
+#: InvenTree/models.py:426
msgid "upload date"
msgstr "yükleme tarihi"
-#: InvenTree/models.py:438
+#: InvenTree/models.py:448
msgid "Filename must not be empty"
msgstr "Dosya adı boş olamaz"
-#: InvenTree/models.py:447
+#: InvenTree/models.py:457
msgid "Invalid attachment directory"
msgstr "Ek dosya yolu geçersiz"
-#: InvenTree/models.py:457
+#: InvenTree/models.py:467
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "Dosya adı geçersiz karakterler içeriyor'{c}'"
-#: InvenTree/models.py:460
+#: InvenTree/models.py:470
msgid "Filename missing extension"
msgstr "Dosya uzantısı yok"
-#: InvenTree/models.py:467
+#: InvenTree/models.py:477
msgid "Attachment with this filename already exists"
msgstr "Aynı isimli başka bir dosya zaten var"
-#: InvenTree/models.py:474
+#: InvenTree/models.py:484
msgid "Error renaming file"
msgstr "Dosya adı değiştirilirken hata"
-#: InvenTree/models.py:510
+#: InvenTree/models.py:520
msgid "Invalid choice"
msgstr "Geçersiz seçim"
-#: InvenTree/models.py:547 InvenTree/models.py:548 common/models.py:1879
+#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889
#: company/models.py:358 label/models.py:101 part/models.py:746
-#: part/models.py:2413 plugin/models.py:94 report/models.py:152
+#: part/models.py:2418 plugin/models.py:94 report/models.py:152
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin.html:134
@@ -288,16 +288,16 @@ msgstr "Geçersiz seçim"
#: templates/js/translated/company.js:793
#: templates/js/translated/notification.js:71
#: templates/js/translated/part.js:686 templates/js/translated/part.js:838
-#: templates/js/translated/part.js:1961 templates/js/translated/stock.js:2390
+#: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2390
msgid "Name"
msgstr "Adı"
-#: InvenTree/models.py:554 build/models.py:163
+#: InvenTree/models.py:564 build/models.py:163
#: build/templates/build/detail.html:24 company/models.py:282
#: company/models.py:517 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
#: company/templates/company/supplier_part.html:108 label/models.py:108
-#: order/models.py:82 part/models.py:769 part/models.py:2425
+#: order/models.py:82 part/models.py:769 part/models.py:2430
#: part/templates/part/category.html:80 part/templates/part/part_base.html:172
#: part/templates/part/part_scheduling.html:12 report/models.py:165
#: report/models.py:507 report/models.py:551
@@ -305,60 +305,60 @@ msgstr "Adı"
#: stock/templates/stock/location.html:113
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/InvenTree/settings/settings.html:358
-#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:846
-#: templates/js/translated/build.js:2512 templates/js/translated/company.js:444
+#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862
+#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444
#: templates/js/translated/company.js:702
#: templates/js/translated/company.js:986 templates/js/translated/order.js:1988
#: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831
#: templates/js/translated/part.js:745 templates/js/translated/part.js:1187
-#: templates/js/translated/part.js:1463 templates/js/translated/part.js:1997
-#: templates/js/translated/part.js:2072 templates/js/translated/stock.js:1744
+#: templates/js/translated/part.js:1462 templates/js/translated/part.js:1996
+#: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1744
#: templates/js/translated/stock.js:2422 templates/js/translated/stock.js:2482
msgid "Description"
msgstr "Açıklama"
-#: InvenTree/models.py:555
+#: InvenTree/models.py:565
msgid "Description (optional)"
msgstr "Açıklama (isteğe bağlı)"
-#: InvenTree/models.py:563
+#: InvenTree/models.py:573
msgid "parent"
msgstr "üst"
-#: InvenTree/models.py:570 InvenTree/models.py:571
-#: templates/js/translated/part.js:2006 templates/js/translated/stock.js:2431
+#: InvenTree/models.py:580 InvenTree/models.py:581
+#: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2431
msgid "Path"
msgstr ""
-#: InvenTree/models.py:672
+#: InvenTree/models.py:682
msgid "Barcode Data"
msgstr ""
-#: InvenTree/models.py:673
+#: InvenTree/models.py:683
msgid "Third party barcode data"
msgstr ""
-#: InvenTree/models.py:678 order/serializers.py:486
+#: InvenTree/models.py:688 order/serializers.py:486
msgid "Barcode Hash"
msgstr ""
-#: InvenTree/models.py:679
+#: InvenTree/models.py:689
msgid "Unique hash of barcode data"
msgstr ""
-#: InvenTree/models.py:724
+#: InvenTree/models.py:734
msgid "Existing barcode found"
msgstr ""
-#: InvenTree/models.py:777
+#: InvenTree/models.py:787
msgid "Server Error"
msgstr ""
-#: InvenTree/models.py:778
+#: InvenTree/models.py:788
msgid "An error has been logged by the server."
msgstr ""
-#: InvenTree/serializers.py:55 part/models.py:2741
+#: InvenTree/serializers.py:55 part/models.py:2766
msgid "Must be a valid number"
msgstr "Geçerli bir numara olmalı"
@@ -538,7 +538,7 @@ msgid "InvenTree system health checks failed"
msgstr "InvenTree sistem sağlık kontrolü başarısız"
#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140
-#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:334
+#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:342
msgid "Pending"
msgstr "Bekliyor"
@@ -660,7 +660,7 @@ msgstr "Stok parçalarını birleştir"
msgid "Converted to variant"
msgstr ""
-#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:221
+#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:229
msgid "Sent to customer"
msgstr "Müşteriye gönderildi"
@@ -755,7 +755,7 @@ msgstr ""
#: report/templates/report/inventree_build_order_base.html:105
#: templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
-#: templates/js/translated/build.js:764
+#: templates/js/translated/build.js:780
msgid "Build Order"
msgstr "Yapım İşi Emri"
@@ -774,12 +774,12 @@ msgid "Build Order Reference"
msgstr "Yapım İşi Emri Referansı"
#: build/models.py:155 order/models.py:240 order/models.py:627
-#: order/models.py:908 part/models.py:2659
+#: order/models.py:908 part/models.py:2676
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
-#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:853
-#: templates/js/translated/build.js:1813 templates/js/translated/order.js:2251
+#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872
+#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251
#: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823
#: templates/js/translated/order.js:4331
msgid "Reference"
@@ -801,10 +801,10 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri"
#: build/models.py:180 build/templates/build/build_base.html:80
#: build/templates/build/detail.html:29 company/models.py:679
#: order/models.py:1005 order/models.py:1116 order/models.py:1117
-#: part/models.py:343 part/models.py:2181 part/models.py:2196
-#: part/models.py:2215 part/models.py:2233 part/models.py:2332
-#: part/models.py:2459 part/models.py:2549 part/models.py:2634
-#: part/models.py:2910 part/serializers.py:814
+#: part/models.py:343 part/models.py:2186 part/models.py:2201
+#: part/models.py:2220 part/models.py:2238 part/models.py:2337
+#: part/models.py:2464 part/models.py:2556 part/models.py:2641
+#: part/models.py:2935 part/serializers.py:828
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/upload_bom.html:52
@@ -816,10 +816,10 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri"
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:16
#: templates/email/overdue_build_order.html:16
-#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:552
-#: templates/js/translated/bom.js:689 templates/js/translated/bom.js:800
-#: templates/js/translated/build.js:1189 templates/js/translated/build.js:1682
-#: templates/js/translated/build.js:2126 templates/js/translated/build.js:2517
+#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:553
+#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816
+#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698
+#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547
#: templates/js/translated/company.js:301
#: templates/js/translated/company.js:531
#: templates/js/translated/company.js:643
@@ -828,7 +828,7 @@ msgstr "Bu yapım işinin tahsis edildiği yapım işi emri"
#: templates/js/translated/order.js:2205 templates/js/translated/order.js:3185
#: templates/js/translated/order.js:3581 templates/js/translated/order.js:3807
#: templates/js/translated/part.js:1172 templates/js/translated/part.js:1244
-#: templates/js/translated/part.js:1441 templates/js/translated/stock.js:586
+#: templates/js/translated/part.js:1440 templates/js/translated/stock.js:586
#: templates/js/translated/stock.js:751 templates/js/translated/stock.js:958
#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2508
#: templates/js/translated/stock.js:2703 templates/js/translated/stock.js:2837
@@ -847,8 +847,8 @@ msgstr "Satış Emri Referansı"
msgid "SalesOrder to which this build is allocated"
msgstr "Bu yapım işinin tahsis edildiği satış emri"
-#: build/models.py:202 build/serializers.py:800
-#: templates/js/translated/build.js:2114 templates/js/translated/order.js:3173
+#: build/models.py:202 build/serializers.py:819
+#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173
msgid "Source Location"
msgstr "Kaynak Konum"
@@ -889,7 +889,7 @@ msgid "Build status code"
msgstr "Yapım işi durum kodu"
#: build/models.py:240 build/serializers.py:225 order/serializers.py:464
-#: stock/models.py:609 templates/js/translated/order.js:1496
+#: stock/models.py:608 templates/js/translated/order.js:1496
msgid "Batch Code"
msgstr "Sıra numarası"
@@ -911,7 +911,7 @@ msgid "Target date for build completion. Build will be overdue after this date."
msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak."
#: build/models.py:255 order/models.py:286
-#: templates/js/translated/build.js:2594
+#: templates/js/translated/build.js:2624
msgid "Completion Date"
msgstr "Tamamlama tarihi"
@@ -919,7 +919,7 @@ msgstr "Tamamlama tarihi"
msgid "completed by"
msgstr "tamamlayan"
-#: build/models.py:269 templates/js/translated/build.js:2562
+#: build/models.py:269 templates/js/translated/build.js:2592
msgid "Issued by"
msgstr "Veren"
@@ -932,7 +932,7 @@ msgstr "Bu yapım işi emrini veren kullanıcı"
#: order/templates/order/order_base.html:185
#: order/templates/order/sales_order_base.html:183 part/models.py:942
#: report/templates/report/inventree_build_order_base.html:158
-#: templates/js/translated/build.js:2574 templates/js/translated/order.js:2022
+#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022
msgid "Responsible"
msgstr "Sorumlu"
@@ -943,7 +943,7 @@ msgstr "Bu yapım işi emrinden sorumlu kullanıcı"
#: build/models.py:284 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:188
-#: part/templates/part/part_base.html:359 stock/models.py:603
+#: part/templates/part/part_base.html:359 stock/models.py:602
#: stock/templates/stock/item_base.html:203
msgid "External Link"
msgstr "Harici Bağlantı"
@@ -973,48 +973,48 @@ msgstr "Yapım işi çıktısı zaten tamamlanmış"
msgid "Build output does not match Build Order"
msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor"
-#: build/models.py:1158
+#: build/models.py:1167
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "Ana parça izlenebilir olarak işaretlendiğinden, yapım işi çıktısı için bir yapım işi ögesi belirtmelidir"
-#: build/models.py:1167
+#: build/models.py:1176
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:1177 order/models.py:1383
+#: build/models.py:1186 order/models.py:1383
msgid "Stock item is over-allocated"
msgstr "Stok kalemi fazladan tahsis edilmiş"
-#: build/models.py:1183 order/models.py:1386
+#: build/models.py:1192 order/models.py:1386
msgid "Allocation quantity must be greater than zero"
msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır"
-#: build/models.py:1189
+#: build/models.py:1198
msgid "Quantity must be 1 for serialized stock"
msgstr "Seri numaralı stok için miktar bir olmalı"
-#: build/models.py:1246
+#: build/models.py:1255
msgid "Selected stock item not found in BOM"
msgstr ""
-#: build/models.py:1315 stock/templates/stock/item_base.html:175
-#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2496
+#: build/models.py:1324 stock/templates/stock/item_base.html:175
+#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526
#: templates/navbar.html:38
msgid "Build"
msgstr "Yapım İşi"
-#: build/models.py:1316
+#: build/models.py:1325
msgid "Build to allocate parts"
msgstr "Yapım işi için tahsis edilen parçalar"
-#: build/models.py:1332 build/serializers.py:645 order/serializers.py:1035
+#: build/models.py:1341 build/serializers.py:660 order/serializers.py:1035
#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754
#: stock/serializers.py:880 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:197
-#: templates/js/translated/build.js:774 templates/js/translated/build.js:779
-#: templates/js/translated/build.js:2128 templates/js/translated/build.js:2679
+#: templates/js/translated/build.js:790 templates/js/translated/build.js:795
+#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709
#: templates/js/translated/order.js:107 templates/js/translated/order.js:3186
#: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493
#: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680
@@ -1023,18 +1023,18 @@ msgstr "Yapım işi için tahsis edilen parçalar"
msgid "Stock Item"
msgstr "Stok Kalemi"
-#: build/models.py:1333
+#: build/models.py:1342
msgid "Source stock item"
msgstr "Kaynak stok kalemi"
-#: build/models.py:1345 build/serializers.py:193
+#: build/models.py:1354 build/serializers.py:193
#: build/templates/build/build_base.html:85
-#: build/templates/build/detail.html:34 common/models.py:1701
+#: build/templates/build/detail.html:34 common/models.py:1711
#: company/templates/company/supplier_part.html:341 order/models.py:901
#: order/models.py:1427 order/serializers.py:1209
#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40
-#: part/models.py:2650 part/templates/part/detail.html:951
-#: part/templates/part/detail.html:1037
+#: part/models.py:2657 part/templates/part/detail.html:950
+#: part/templates/part/detail.html:1036
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
#: report/templates/report/inventree_build_order_base.html:113
@@ -1045,39 +1045,39 @@ msgstr "Kaynak stok kalemi"
#: stock/serializers.py:291 stock/templates/stock/item_base.html:290
#: stock/templates/stock/item_base.html:298
#: templates/email/build_order_completed.html:18
-#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:691
-#: templates/js/translated/bom.js:861 templates/js/translated/build.js:458
-#: templates/js/translated/build.js:610 templates/js/translated/build.js:801
-#: templates/js/translated/build.js:1211 templates/js/translated/build.js:1708
-#: templates/js/translated/build.js:2129
+#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:692
+#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474
+#: templates/js/translated/build.js:626 templates/js/translated/build.js:817
+#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724
+#: templates/js/translated/build.js:2159
#: templates/js/translated/model_renderers.js:120
#: templates/js/translated/order.js:123 templates/js/translated/order.js:1137
#: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490
#: templates/js/translated/order.js:3187 templates/js/translated/order.js:3507
#: templates/js/translated/order.js:3594 templates/js/translated/order.js:3686
#: templates/js/translated/order.js:3829 templates/js/translated/order.js:4337
-#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2217
-#: templates/js/translated/part.js:2686 templates/js/translated/part.js:2727
-#: templates/js/translated/part.js:2805 templates/js/translated/stock.js:458
+#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2216
+#: templates/js/translated/part.js:2685 templates/js/translated/part.js:2726
+#: templates/js/translated/part.js:2804 templates/js/translated/stock.js:458
#: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782
#: templates/js/translated/stock.js:2630 templates/js/translated/stock.js:2715
msgid "Quantity"
msgstr "Miktar"
-#: build/models.py:1346
+#: build/models.py:1355
msgid "Stock quantity to allocate to build"
msgstr "Yapım işi için tahsis edilen stok miktarı"
-#: build/models.py:1354
+#: build/models.py:1363
msgid "Install into"
msgstr "Kurulduğu yer"
-#: build/models.py:1355
+#: build/models.py:1364
msgid "Destination stock item"
msgstr "Hedef stok kalemi"
-#: build/serializers.py:138 build/serializers.py:674
-#: templates/js/translated/build.js:1199
+#: build/serializers.py:138 build/serializers.py:689
+#: templates/js/translated/build.js:1215
msgid "Build Output"
msgstr ""
@@ -1101,9 +1101,9 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr "Yapım işi çıktısı için miktarını girin"
-#: build/serializers.py:208 build/serializers.py:665 order/models.py:318
-#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:545
-#: part/serializers.py:977 stock/models.py:463 stock/models.py:1198
+#: build/serializers.py:208 build/serializers.py:680 order/models.py:318
+#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558
+#: part/serializers.py:991 stock/models.py:462 stock/models.py:1192
#: stock/serializers.py:300
msgid "Quantity must be greater than zero"
msgstr ""
@@ -1147,8 +1147,8 @@ msgstr ""
#: stock/serializers.py:915 stock/serializers.py:1148
#: stock/templates/stock/item_base.html:388
#: templates/js/translated/barcode.js:431
-#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:786
-#: templates/js/translated/build.js:1720 templates/js/translated/order.js:1534
+#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:802
+#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534
#: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605
#: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694
#: templates/js/translated/part.js:181 templates/js/translated/stock.js:588
@@ -1164,7 +1164,7 @@ msgstr ""
#: build/serializers.py:373 build/templates/build/build_base.html:145
#: build/templates/build/detail.html:62 order/models.py:646
#: order/serializers.py:482 stock/templates/stock/item_base.html:421
-#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2546
+#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2576
#: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992
#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1827
#: templates/js/translated/stock.js:2599 templates/js/translated/stock.js:2731
@@ -1203,113 +1203,113 @@ msgstr ""
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:494
+#: build/serializers.py:509
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:496
+#: build/serializers.py:511
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:506
+#: build/serializers.py:521
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:511
+#: build/serializers.py:526
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:512
+#: build/serializers.py:527
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:522 templates/js/translated/build.js:227
+#: build/serializers.py:537 templates/js/translated/build.js:258
msgid "Required stock has not been fully allocated"
msgstr "Gerekli stok tamamen tahsis edilemedi"
-#: build/serializers.py:527 order/serializers.py:208 order/serializers.py:1103
+#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:528
+#: build/serializers.py:543
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:538 templates/js/translated/build.js:231
+#: build/serializers.py:553 templates/js/translated/build.js:262
msgid "Required build quantity has not been completed"
msgstr "Gerekli yapım işi miktarı tamamlanmadı"
-#: build/serializers.py:547
+#: build/serializers.py:562 templates/js/translated/build.js:246
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:577 build/serializers.py:622 part/models.py:2768
-#: part/models.py:2902
+#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793
+#: part/models.py:2927
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:587
+#: build/serializers.py:602
msgid "Build output"
msgstr ""
-#: build/serializers.py:595
+#: build/serializers.py:610
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:636
+#: build/serializers.py:651
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:651 stock/serializers.py:767
+#: build/serializers.py:666 stock/serializers.py:767
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:709 order/serializers.py:1093
+#: build/serializers.py:724 order/serializers.py:1093
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:715
+#: build/serializers.py:730
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:722
+#: build/serializers.py:737
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:727
+#: build/serializers.py:742
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:750 order/serializers.py:1373
+#: build/serializers.py:765 order/serializers.py:1373
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:801
+#: build/serializers.py:820
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:809
+#: build/serializers.py:828
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:810
+#: build/serializers.py:829
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:815
+#: build/serializers.py:834
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:816
+#: build/serializers.py:835
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:821
+#: build/serializers.py:840
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:822
+#: build/serializers.py:841
msgid "Allow allocation of substitute parts"
msgstr ""
@@ -1400,7 +1400,7 @@ msgstr "Stok, yapım işi emri için tamamen tahsis edilemedi"
#: order/templates/order/order_base.html:171
#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:125
-#: templates/js/translated/build.js:2586 templates/js/translated/order.js:2009
+#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009
#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852
#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051
msgid "Target Date"
@@ -1415,16 +1415,16 @@ msgstr "Bu yapım işinin %(target)s tarihinde süresi doluyor"
#: build/templates/build/build_base.html:204
#: order/templates/order/order_base.html:107
#: order/templates/order/sales_order_base.html:94
-#: templates/js/translated/table_filters.js:320
-#: templates/js/translated/table_filters.js:361
-#: templates/js/translated/table_filters.js:391
+#: templates/js/translated/table_filters.js:328
+#: templates/js/translated/table_filters.js:369
+#: templates/js/translated/table_filters.js:399
msgid "Overdue"
msgstr "Vadesi geçmiş"
#: build/templates/build/build_base.html:166
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
#: order/templates/order/sales_order_base.html:171
-#: templates/js/translated/table_filters.js:400
+#: templates/js/translated/table_filters.js:408
msgid "Completed"
msgstr "Tamamlandı"
@@ -1447,7 +1447,7 @@ msgstr "Sipariş Emri"
msgid "Issued By"
msgstr "Veren"
-#: build/templates/build/build_base.html:256
+#: build/templates/build/build_base.html:252
msgid "Delete Build Order"
msgstr "Yapım İşi Emrini Sil"
@@ -1478,19 +1478,19 @@ msgstr ""
#: build/templates/build/detail.html:80
#: stock/templates/stock/item_base.html:168
-#: templates/js/translated/build.js:1215
+#: templates/js/translated/build.js:1231
#: templates/js/translated/model_renderers.js:124
#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1841
#: templates/js/translated/stock.js:2738
-#: templates/js/translated/table_filters.js:159
-#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:167
+#: templates/js/translated/table_filters.js:258
msgid "Batch"
msgstr "Toplu"
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:158
#: order/templates/order/sales_order_base.html:158
-#: templates/js/translated/build.js:2554
+#: templates/js/translated/build.js:2584
msgid "Created"
msgstr "Oluşturuldu"
@@ -1510,7 +1510,7 @@ msgstr "Alt Yapım İşi Emrileri"
msgid "Allocate Stock to Build"
msgstr "Yapım İşi için Stok Tahsis Et"
-#: build/templates/build/detail.html:176 templates/js/translated/build.js:1942
+#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967
msgid "Unallocate stock"
msgstr "Stok tahsisini kaldır"
@@ -1876,9 +1876,9 @@ msgstr "Kategori Paremetre Sablonu Kopyala"
msgid "Copy category parameter templates when creating a part"
msgstr "Parça oluştururken kategori parametre şablonlarını kopyala"
-#: common/models.py:951 part/models.py:2461 report/models.py:158
+#: common/models.py:951 part/models.py:2466 report/models.py:158
#: templates/js/translated/table_filters.js:38
-#: templates/js/translated/table_filters.js:484
+#: templates/js/translated/table_filters.js:492
msgid "Template"
msgstr "Şablon"
@@ -1886,9 +1886,9 @@ msgstr "Şablon"
msgid "Parts are templates by default"
msgstr "Parçaları varsayılan olan şablondur"
-#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1454
-#: templates/js/translated/table_filters.js:176
-#: templates/js/translated/table_filters.js:447
+#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1471
+#: templates/js/translated/table_filters.js:184
+#: templates/js/translated/table_filters.js:455
msgid "Assembly"
msgstr "Montaj"
@@ -1897,7 +1897,7 @@ msgid "Parts can be assembled from other components by default"
msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir"
#: common/models.py:965 part/models.py:900
-#: templates/js/translated/table_filters.js:455
+#: templates/js/translated/table_filters.js:463
msgid "Component"
msgstr "Bileşen"
@@ -1914,7 +1914,7 @@ msgid "Parts are purchaseable by default"
msgstr "Parçalar varsayılan olarak satın alınabilir"
#: common/models.py:979 part/models.py:916
-#: templates/js/translated/table_filters.js:476
+#: templates/js/translated/table_filters.js:484
msgid "Salable"
msgstr "Satılabilir"
@@ -1924,8 +1924,8 @@ msgstr "Parçalar varsayılan olarak satılabilir"
#: common/models.py:986 part/models.py:906
#: templates/js/translated/table_filters.js:46
-#: templates/js/translated/table_filters.js:108
-#: templates/js/translated/table_filters.js:488
+#: templates/js/translated/table_filters.js:116
+#: templates/js/translated/table_filters.js:496
msgid "Trackable"
msgstr "Takip Edilebilir"
@@ -1936,7 +1936,7 @@ msgstr "Parçalar varsayılan olarak takip edilebilir"
#: common/models.py:993 part/models.py:926
#: part/templates/part/part_base.html:156
#: templates/js/translated/table_filters.js:42
-#: templates/js/translated/table_filters.js:492
+#: templates/js/translated/table_filters.js:500
msgid "Virtual"
msgstr "Sanal"
@@ -2300,7 +2300,7 @@ msgstr ""
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1344 common/models.py:1662
+#: common/models.py:1344 common/models.py:1672
msgid "Settings key (must be unique - case insensitive"
msgstr ""
@@ -2616,101 +2616,109 @@ msgstr ""
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1702
+#: common/models.py:1647
+msgid "Table String Length"
+msgstr ""
+
+#: common/models.py:1648
+msgid "Maximimum length limit for strings displayed in table views"
+msgstr ""
+
+#: common/models.py:1712
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1709 company/serializers.py:372
+#: common/models.py:1719 company/serializers.py:372
#: company/templates/company/supplier_part.html:346 order/models.py:942
-#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2222
+#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221
msgid "Price"
msgstr "Fiyat"
-#: common/models.py:1710
+#: common/models.py:1720
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1870 common/models.py:2048
+#: common/models.py:1880 common/models.py:2058
msgid "Endpoint"
msgstr ""
-#: common/models.py:1871
+#: common/models.py:1881
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1890
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1885 part/models.py:921 plugin/models.py:100
+#: common/models.py:1895 part/models.py:921 plugin/models.py:100
#: templates/js/translated/table_filters.js:34
-#: templates/js/translated/table_filters.js:104
-#: templates/js/translated/table_filters.js:316
-#: templates/js/translated/table_filters.js:442
+#: templates/js/translated/table_filters.js:112
+#: templates/js/translated/table_filters.js:324
+#: templates/js/translated/table_filters.js:450
msgid "Active"
msgstr "Aktif"
-#: common/models.py:1886
+#: common/models.py:1896
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1900
+#: common/models.py:1910
msgid "Token"
msgstr ""
-#: common/models.py:1901
+#: common/models.py:1911
msgid "Token for access"
msgstr ""
-#: common/models.py:1908
+#: common/models.py:1918
msgid "Secret"
msgstr ""
-#: common/models.py:1909
+#: common/models.py:1919
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:2015
+#: common/models.py:2025
msgid "Message ID"
msgstr ""
-#: common/models.py:2016
+#: common/models.py:2026
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:2024
+#: common/models.py:2034
msgid "Host"
msgstr ""
-#: common/models.py:2025
+#: common/models.py:2035
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:2032
+#: common/models.py:2042
msgid "Header"
msgstr ""
-#: common/models.py:2033
+#: common/models.py:2043
msgid "Header of this message"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2049
msgid "Body"
msgstr ""
-#: common/models.py:2040
+#: common/models.py:2050
msgid "Body of this message"
msgstr ""
-#: common/models.py:2049
+#: common/models.py:2059
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:2054
+#: common/models.py:2064
msgid "Worked on"
msgstr ""
-#: common/models.py:2055
+#: common/models.py:2065
msgid "Was the work on this message finished?"
msgstr ""
@@ -2859,9 +2867,9 @@ msgstr "Para birimi"
msgid "Default currency used for this company"
msgstr "Bu şirket için varsayılan para birimi"
-#: company/models.py:248 company/models.py:482 stock/models.py:545
+#: company/models.py:248 company/models.py:482 stock/models.py:544
#: stock/serializers.py:85 stock/templates/stock/item_base.html:143
-#: templates/js/translated/bom.js:542
+#: templates/js/translated/bom.js:543
msgid "Base Part"
msgstr "Temel Parça"
@@ -2877,7 +2885,7 @@ msgstr "Parça seçin"
#: templates/js/translated/company.js:533
#: templates/js/translated/company.js:668
#: templates/js/translated/company.js:956 templates/js/translated/part.js:236
-#: templates/js/translated/table_filters.js:419
+#: templates/js/translated/table_filters.js:427
msgid "Manufacturer"
msgstr "Üretici"
@@ -2920,7 +2928,7 @@ msgstr "Parametre adı"
#: company/models.py:365
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2042 templates/js/translated/company.js:581
+#: stock/models.py:2036 templates/js/translated/company.js:581
#: templates/js/translated/company.js:799 templates/js/translated/part.js:847
#: templates/js/translated/stock.js:1360
msgid "Value"
@@ -2930,7 +2938,7 @@ msgstr "Değer"
msgid "Parameter value"
msgstr "Parametre değeri"
-#: company/models.py:372 part/models.py:888 part/models.py:2421
+#: company/models.py:372 part/models.py:888 part/models.py:2426
#: part/templates/part/part_base.html:286
#: templates/InvenTree/settings/settings.html:352
#: templates/js/translated/company.js:805 templates/js/translated/part.js:853
@@ -2954,7 +2962,7 @@ msgstr ""
#: templates/js/translated/company.js:436
#: templates/js/translated/company.js:929 templates/js/translated/order.js:1975
#: templates/js/translated/part.js:217 templates/js/translated/part.js:993
-#: templates/js/translated/table_filters.js:423
+#: templates/js/translated/table_filters.js:431
msgid "Supplier"
msgstr "Tedarikçi"
@@ -2986,22 +2994,22 @@ msgid "Supplier part description"
msgstr ""
#: company/models.py:523 company/templates/company/supplier_part.html:181
-#: part/models.py:2662 part/templates/part/upload_bom.html:59
+#: part/models.py:2679 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399
msgid "Note"
msgstr "Not"
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "base cost"
msgstr "temel maliyet"
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:529 company/templates/company/supplier_part.html:167
-#: stock/models.py:571 stock/templates/stock/item_base.html:243
+#: stock/models.py:570 stock/templates/stock/item_base.html:243
#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1974
msgid "Packaging"
msgstr "Paketleme"
@@ -3023,7 +3031,7 @@ msgstr ""
msgid "Unit quantity supplied in a single pack"
msgstr ""
-#: company/models.py:539 part/models.py:1771
+#: company/models.py:539 part/models.py:1776
msgid "multiple"
msgstr "çoklu"
@@ -3034,10 +3042,10 @@ msgstr ""
#: company/models.py:547 company/templates/company/supplier_part.html:115
#: templates/email/build_order_required_stock.html:19
#: templates/email/low_stock_notification.html:18
-#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1823
-#: templates/js/translated/build.js:2686 templates/js/translated/part.js:598
+#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839
+#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598
#: templates/js/translated/part.js:601
-#: templates/js/translated/table_filters.js:186
+#: templates/js/translated/table_filters.js:194
msgid "Available"
msgstr "Mevcut"
@@ -3109,13 +3117,13 @@ msgid "Download image from URL"
msgstr ""
#: company/templates/company/company_base.html:86 order/models.py:641
-#: order/templates/order/sales_order_base.html:116 stock/models.py:590
-#: stock/models.py:591 stock/serializers.py:809
+#: order/templates/order/sales_order_base.html:116 stock/models.py:589
+#: stock/models.py:590 stock/serializers.py:809
#: stock/templates/stock/item_base.html:399
#: templates/email/overdue_sales_order.html:16
#: templates/js/translated/company.js:428 templates/js/translated/order.js:2813
#: templates/js/translated/stock.js:2563
-#: templates/js/translated/table_filters.js:427
+#: templates/js/translated/table_filters.js:435
msgid "Customer"
msgstr "Müşteri"
@@ -3234,7 +3242,7 @@ msgid "New Sales Order"
msgstr "Yeni Satış Emri"
#: company/templates/company/detail.html:168
-#: templates/js/translated/build.js:1693
+#: templates/js/translated/build.js:1709
msgid "Assigned Stock"
msgstr "Atanan Stok"
@@ -3312,7 +3320,7 @@ msgid "Delete parameters"
msgstr ""
#: company/templates/company/manufacturer_part.html:245
-#: part/templates/part/detail.html:840
+#: part/templates/part/detail.html:839
msgid "Add Parameter"
msgstr ""
@@ -3333,7 +3341,7 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:554
+#: company/templates/company/supplier_part.html:24 stock/models.py:553
#: stock/templates/stock/item_base.html:236
#: templates/js/translated/company.js:945 templates/js/translated/order.js:1135
#: templates/js/translated/stock.js:1931
@@ -3444,7 +3452,7 @@ msgstr "Fiyat Bilgisi"
#: company/templates/company/supplier_part.html:247
#: company/templates/company/supplier_part.html:388
-#: part/templates/part/prices.html:276 templates/js/translated/part.js:2294
+#: part/templates/part/prices.html:276 templates/js/translated/part.js:2293
msgid "Add Price Break"
msgstr ""
@@ -3457,12 +3465,12 @@ msgid "No price break information found"
msgstr ""
#: company/templates/company/supplier_part.html:314
-#: templates/js/translated/part.js:2304
+#: templates/js/translated/part.js:2303
msgid "Delete Price Break"
msgstr ""
#: company/templates/company/supplier_part.html:328
-#: templates/js/translated/part.js:2318
+#: templates/js/translated/part.js:2317
msgid "Edit Price Break"
msgstr ""
@@ -3488,8 +3496,8 @@ msgstr ""
#: stock/templates/stock/stock_app_base.html:10
#: templates/InvenTree/search.html:153
#: templates/InvenTree/settings/sidebar.html:45
-#: templates/js/translated/part.js:749 templates/js/translated/part.js:1334
-#: templates/js/translated/part.js:1500 templates/js/translated/stock.js:959
+#: templates/js/translated/part.js:749 templates/js/translated/part.js:1333
+#: templates/js/translated/part.js:1499 templates/js/translated/stock.js:959
#: templates/js/translated/stock.js:1756 templates/navbar.html:31
msgid "Stock"
msgstr "Stok"
@@ -3793,7 +3801,7 @@ msgstr ""
#: order/models.py:1013 order/templates/order/order_base.html:178
#: templates/js/translated/order.js:1641 templates/js/translated/order.js:2373
#: templates/js/translated/part.js:1087 templates/js/translated/part.js:1125
-#: templates/js/translated/table_filters.js:338
+#: templates/js/translated/table_filters.js:346
msgid "Received"
msgstr ""
@@ -3801,7 +3809,7 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:681
+#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:680
#: stock/serializers.py:169 stock/templates/stock/item_base.html:189
#: templates/js/translated/stock.js:1962
msgid "Purchase Price"
@@ -4192,8 +4200,8 @@ msgstr "Tedarikçi Parçası Seçin"
#: part/templates/part/import_wizard/ajax_match_fields.html:64
#: part/templates/part/import_wizard/ajax_match_references.html:42
#: part/templates/part/import_wizard/match_references.html:49
-#: templates/js/translated/bom.js:77 templates/js/translated/build.js:463
-#: templates/js/translated/build.js:615 templates/js/translated/build.js:2015
+#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479
+#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040
#: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586
#: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625
#: templates/js/translated/stock.js:793
@@ -4315,8 +4323,8 @@ msgid "Pending Shipments"
msgstr ""
#: order/templates/order/sales_order_detail.html:72
-#: templates/attachment_table.html:6 templates/js/translated/bom.js:1116
-#: templates/js/translated/build.js:1923
+#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133
+#: templates/js/translated/build.js:1943
msgid "Actions"
msgstr "İşlemler"
@@ -4405,9 +4413,9 @@ msgid "Available Stock"
msgstr ""
#: part/bom.py:130 part/templates/part/part_base.html:213
-#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1853
+#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890
#: templates/js/translated/part.js:588 templates/js/translated/part.js:608
-#: templates/js/translated/part.js:1337 templates/js/translated/part.js:1525
+#: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524
#: templates/js/translated/table_filters.js:68
msgid "On Order"
msgstr ""
@@ -4436,7 +4444,7 @@ msgstr ""
msgid "Icon (optional)"
msgstr ""
-#: part/models.py:122 part/models.py:2504 part/templates/part/category.html:16
+#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
@@ -4453,7 +4461,7 @@ msgstr "Parça Kategorileri"
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84
#: templates/InvenTree/settings/sidebar.html:41
-#: templates/js/translated/part.js:2016 templates/js/translated/search.js:146
+#: templates/js/translated/part.js:2015 templates/js/translated/search.js:146
#: templates/navbar.html:24 users/models.py:38
msgid "Parts"
msgstr "Parçalar"
@@ -4483,7 +4491,7 @@ msgstr "En son seri numarası"
msgid "Duplicate IPN not allowed in part settings"
msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor"
-#: part/models.py:745 part/models.py:2558
+#: part/models.py:745 part/models.py:2565
msgid "Part name"
msgstr "Parça adı"
@@ -4516,11 +4524,11 @@ msgstr "Anahtar kelimeler"
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:783 part/models.py:2253 part/models.py:2503
+#: part/models.py:783 part/models.py:2258 part/models.py:2508
#: part/templates/part/part_base.html:263
#: templates/InvenTree/settings/settings.html:232
#: templates/js/translated/notification.js:50
-#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1723
+#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1722
msgid "Category"
msgstr ""
@@ -4529,7 +4537,7 @@ msgid "Part category"
msgstr ""
#: part/models.py:789 part/templates/part/part_base.html:272
-#: templates/js/translated/part.js:737 templates/js/translated/part.js:1430
+#: templates/js/translated/part.js:737 templates/js/translated/part.js:1429
#: templates/js/translated/stock.js:1726
msgid "IPN"
msgstr "DPN"
@@ -4631,249 +4639,260 @@ msgstr ""
msgid "Creation User"
msgstr "Oluşturan Kullanıcı"
-#: part/models.py:1771
+#: part/models.py:1776
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2300
+#: part/models.py:2305
msgid "Test templates can only be created for trackable parts"
msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabilir"
-#: part/models.py:2317
+#: part/models.py:2322
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2337 templates/js/translated/part.js:2067
+#: part/models.py:2342 templates/js/translated/part.js:2066
#: templates/js/translated/stock.js:1340
msgid "Test Name"
msgstr "Test Adı"
-#: part/models.py:2338
+#: part/models.py:2343
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2343
+#: part/models.py:2348
msgid "Test Description"
msgstr "Test Açıklaması"
-#: part/models.py:2344
+#: part/models.py:2349
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2349 templates/js/translated/part.js:2076
-#: templates/js/translated/table_filters.js:302
+#: part/models.py:2354 templates/js/translated/part.js:2075
+#: templates/js/translated/table_filters.js:310
msgid "Required"
msgstr "Gerekli"
-#: part/models.py:2350
+#: part/models.py:2355
msgid "Is this test required to pass?"
msgstr "Testi geçmesi için bu gerekli mi?"
-#: part/models.py:2355 templates/js/translated/part.js:2084
+#: part/models.py:2360 templates/js/translated/part.js:2083
msgid "Requires Value"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2361
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2361 templates/js/translated/part.js:2091
+#: part/models.py:2366 templates/js/translated/part.js:2090
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2367
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2370
+#: part/models.py:2375
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2406
+#: part/models.py:2411
msgid "Parameter template name must be unique"
msgstr "Parametre şablon adı benzersiz olmalıdır"
-#: part/models.py:2414
+#: part/models.py:2419
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2421
+#: part/models.py:2426
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2426
+#: part/models.py:2431
msgid "Parameter description"
msgstr ""
-#: part/models.py:2459
+#: part/models.py:2464
msgid "Parent Part"
msgstr ""
-#: part/models.py:2461 part/models.py:2509 part/models.py:2510
+#: part/models.py:2466 part/models.py:2514 part/models.py:2515
#: templates/InvenTree/settings/settings.html:227
msgid "Parameter Template"
msgstr "Parametre Şablonu"
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Data"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2514 templates/InvenTree/settings/settings.html:236
+#: part/models.py:2519 templates/InvenTree/settings/settings.html:236
msgid "Default Value"
msgstr ""
-#: part/models.py:2515
+#: part/models.py:2520
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2550
+#: part/models.py:2557
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2553 templates/js/translated/model_renderers.js:212
+#: part/models.py:2560 templates/js/translated/model_renderers.js:212
msgid "Part ID"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2561
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2557
+#: part/models.py:2564
msgid "Part Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2568
msgid "Part IPN"
msgstr ""
-#: part/models.py:2562
+#: part/models.py:2569
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2565
+#: part/models.py:2572
msgid "Level"
msgstr ""
-#: part/models.py:2566
+#: part/models.py:2573
msgid "BOM level"
msgstr ""
-#: part/models.py:2635
+#: part/models.py:2642
msgid "Select parent part"
msgstr ""
-#: part/models.py:2643
+#: part/models.py:2650
msgid "Sub part"
msgstr ""
-#: part/models.py:2644
+#: part/models.py:2651
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2650
+#: part/models.py:2657
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2652 part/templates/part/upload_bom.html:58
-#: templates/js/translated/bom.js:876 templates/js/translated/bom.js:1005
-#: templates/js/translated/table_filters.js:100
+#: part/models.py:2661 part/templates/part/upload_bom.html:58
+#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999
+#: templates/js/translated/table_filters.js:84
+#: templates/js/translated/table_filters.js:108
msgid "Optional"
msgstr ""
-#: part/models.py:2652
+#: part/models.py:2662
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2655 part/templates/part/upload_bom.html:55
+#: part/models.py:2667 templates/js/translated/bom.js:895
+#: templates/js/translated/bom.js:1008
+#: templates/js/translated/table_filters.js:88
+msgid "Consumable"
+msgstr ""
+
+#: part/models.py:2668
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:2672 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2656
+#: part/models.py:2673
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2659
+#: part/models.py:2676
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2662
+#: part/models.py:2679
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "Checksum"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2668 part/templates/part/upload_bom.html:57
-#: templates/js/translated/bom.js:1022
+#: part/models.py:2685 part/templates/part/upload_bom.html:57
+#: templates/js/translated/bom.js:1025
#: templates/js/translated/table_filters.js:76
-#: templates/js/translated/table_filters.js:96
+#: templates/js/translated/table_filters.js:104
msgid "Inherited"
msgstr ""
-#: part/models.py:2669
+#: part/models.py:2686
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır"
-#: part/models.py:2674 part/templates/part/upload_bom.html:56
-#: templates/js/translated/bom.js:1014
+#: part/models.py:2691 part/templates/part/upload_bom.html:56
+#: templates/js/translated/bom.js:1017
msgid "Allow Variants"
msgstr "Çeşide İzin Ver"
-#: part/models.py:2675
+#: part/models.py:2692
msgid "Stock items for variant parts can be used for this BOM item"
msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir"
-#: part/models.py:2753 stock/models.py:447
+#: part/models.py:2778 stock/models.py:446
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2762 part/models.py:2764
+#: part/models.py:2787 part/models.py:2789
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2869
+#: part/models.py:2894
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:2890
+#: part/models.py:2915
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:2903
+#: part/models.py:2928
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:2911
+#: part/models.py:2936
msgid "Substitute part"
msgstr ""
-#: part/models.py:2926
+#: part/models.py:2951
msgid "Part 1"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Part 2"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2948
+#: part/models.py:2973
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:2952
+#: part/models.py:2977
msgid "Duplicate relationship already exists"
msgstr ""
@@ -4881,75 +4900,75 @@ msgstr ""
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:815
+#: part/serializers.py:829
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:823
+#: part/serializers.py:837
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:824
+#: part/serializers.py:838
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:829
+#: part/serializers.py:843
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:830
+#: part/serializers.py:844
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:835
+#: part/serializers.py:849
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:836
+#: part/serializers.py:850
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:841
+#: part/serializers.py:855
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:842
+#: part/serializers.py:856
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:882
+#: part/serializers.py:896
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:883
+#: part/serializers.py:897
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:913
+#: part/serializers.py:927
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:956
+#: part/serializers.py:970
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:959
+#: part/serializers.py:973
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:962
+#: part/serializers.py:976
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:971
+#: part/serializers.py:985
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:979
+#: part/serializers.py:993
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1000
+#: part/serializers.py:1014
msgid "At least one BOM item is required"
msgstr ""
@@ -5243,22 +5262,22 @@ msgstr ""
msgid "Add Test Result Template"
msgstr ""
-#: part/templates/part/detail.html:914
+#: part/templates/part/detail.html:913
#, python-format
msgid "Purchase Unit Price - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:926
+#: part/templates/part/detail.html:925
#, python-format
msgid "Unit Price-Cost Difference - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:938
+#: part/templates/part/detail.html:937
#, python-format
msgid "Supplier Unit Cost - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:1027
+#: part/templates/part/detail.html:1026
#, python-format
msgid "Unit Price - %(currency)s"
msgstr ""
@@ -5412,7 +5431,7 @@ msgstr "Bu parça %(link)s parçasının bir çeşididir"
#: part/templates/part/part_base.html:200
#: templates/js/translated/company.js:1027
-#: templates/js/translated/table_filters.js:201
+#: templates/js/translated/table_filters.js:209
msgid "In Stock"
msgstr ""
@@ -5426,13 +5445,13 @@ msgstr ""
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1043
+#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075
msgid "Can Build"
msgstr ""
#: part/templates/part/part_base.html:244 templates/js/translated/part.js:591
-#: templates/js/translated/part.js:611 templates/js/translated/part.js:1341
-#: templates/js/translated/part.js:1532
+#: templates/js/translated/part.js:611 templates/js/translated/part.js:1340
+#: templates/js/translated/part.js:1531
msgid "Building"
msgstr ""
@@ -5488,7 +5507,7 @@ msgid "Total Cost"
msgstr "Toplam Maliyet"
#: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43
-#: templates/js/translated/bom.js:997
+#: templates/js/translated/bom.js:1066
msgid "No supplier pricing available"
msgstr ""
@@ -5583,7 +5602,7 @@ msgstr ""
msgid "Calculation parameters"
msgstr ""
-#: part/templates/part/prices.html:160 templates/js/translated/bom.js:991
+#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060
msgid "Supplier Cost"
msgstr ""
@@ -5622,7 +5641,7 @@ msgid "No sale pice history available for this part."
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:614
-#: templates/js/translated/part.js:1329 templates/js/translated/part.js:1331
+#: templates/js/translated/part.js:1328 templates/js/translated/part.js:1330
msgid "No Stock"
msgstr "Stok Yok"
@@ -5993,9 +6012,9 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:595 stock/templates/stock/item_base.html:320
-#: templates/js/translated/build.js:456 templates/js/translated/build.js:608
-#: templates/js/translated/build.js:1209 templates/js/translated/build.js:1706
+#: stock/models.py:594 stock/templates/stock/item_base.html:320
+#: templates/js/translated/build.js:472 templates/js/translated/build.js:624
+#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722
#: templates/js/translated/model_renderers.js:118
#: templates/js/translated/order.js:121 templates/js/translated/order.js:3597
#: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490
@@ -6007,12 +6026,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2030
+#: stock/models.py:2024
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2036
+#: stock/models.py:2030
msgid "Result"
msgstr ""
@@ -6047,241 +6066,241 @@ msgstr ""
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:90 stock/models.py:686
+#: stock/models.py:90 stock/models.py:685
#: stock/templates/stock/item_base.html:250
msgid "Owner"
msgstr ""
-#: stock/models.py:91 stock/models.py:687
+#: stock/models.py:91 stock/models.py:686
msgid "Select Owner"
msgstr ""
-#: stock/models.py:421
+#: stock/models.py:420
msgid "StockItem with this serial number already exists"
msgstr "Bu seri numarasına sahip stok kalemi zaten var"
-#: stock/models.py:453 stock/serializers.py:93
+#: stock/models.py:452 stock/serializers.py:93
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:470
+#: stock/models.py:469
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:480 stock/models.py:489
+#: stock/models.py:479 stock/models.py:488
msgid "Quantity must be 1 for item with a serial number"
msgstr "Seri numarası olan ögenin miktarı bir olmalı"
-#: stock/models.py:481
+#: stock/models.py:480
msgid "Serial number cannot be set if quantity greater than 1"
msgstr "Miktar birden büyük ise seri numarası ayarlanamaz"
-#: stock/models.py:503
+#: stock/models.py:502
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:509
+#: stock/models.py:508
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:522
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:537
+#: stock/models.py:536
msgid "Parent Stock Item"
msgstr "Üst Stok Kalemi"
-#: stock/models.py:547
+#: stock/models.py:546
msgid "Base part"
msgstr ""
-#: stock/models.py:555
+#: stock/models.py:554
msgid "Select a matching supplier part for this stock item"
msgstr "Bu stok kalemi için tedarikçi parçası seçin"
-#: stock/models.py:562 stock/templates/stock/location.html:17
+#: stock/models.py:561 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "Stok Konumu"
-#: stock/models.py:565
+#: stock/models.py:564
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:572
+#: stock/models.py:571
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:578 stock/templates/stock/item_base.html:359
+#: stock/models.py:577 stock/templates/stock/item_base.html:359
msgid "Installed In"
msgstr ""
-#: stock/models.py:581
+#: stock/models.py:580
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:597
+#: stock/models.py:596
msgid "Serial number for this item"
msgstr "Bu öge için seri numarası"
-#: stock/models.py:611
+#: stock/models.py:610
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:616
+#: stock/models.py:615
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:624
msgid "Source Build"
msgstr ""
-#: stock/models.py:627
+#: stock/models.py:626
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:638
+#: stock/models.py:637
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:640
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:647
+#: stock/models.py:646
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:653 stock/templates/stock/item_base.html:427
+#: stock/models.py:652 stock/templates/stock/item_base.html:427
#: templates/js/translated/stock.js:1881
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:654
+#: stock/models.py:653
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:674 stock/templates/stock/item.html:132
+#: stock/models.py:673 stock/templates/stock/item.html:132
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:682
+#: stock/models.py:681
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:709
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1189
+#: stock/models.py:1183
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1195
+#: stock/models.py:1189
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1201
+#: stock/models.py:1195
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1204
+#: stock/models.py:1198
msgid "Serial numbers must be a list of integers"
msgstr "Seri numaraları tam sayı listesi olmalı"
-#: stock/models.py:1207
+#: stock/models.py:1201
msgid "Quantity does not match serial numbers"
msgstr "Miktar seri numaları ile eşleşmiyor"
-#: stock/models.py:1214
+#: stock/models.py:1208
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr "Seri numaraları zaten mevcut: {exists}"
-#: stock/models.py:1284
+#: stock/models.py:1278
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1287
+#: stock/models.py:1281
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1290
+#: stock/models.py:1284
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1293
+#: stock/models.py:1287
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1296
+#: stock/models.py:1290
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1299
+#: stock/models.py:1293
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1306 stock/serializers.py:959
+#: stock/models.py:1300 stock/serializers.py:959
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1310
+#: stock/models.py:1304
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1314
+#: stock/models.py:1308
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1318
+#: stock/models.py:1312
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1487
+#: stock/models.py:1481
msgid "StockItem cannot be moved as it is not in stock"
msgstr "Stok kalemi stokta olmadığı için taşınamaz"
-#: stock/models.py:1948
+#: stock/models.py:1942
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2006
+#: stock/models.py:2000
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2012
+#: stock/models.py:2006
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2031
+#: stock/models.py:2025
msgid "Test name"
msgstr ""
-#: stock/models.py:2037
+#: stock/models.py:2031
msgid "Test result"
msgstr ""
-#: stock/models.py:2043
+#: stock/models.py:2037
msgid "Test output value"
msgstr ""
-#: stock/models.py:2050
+#: stock/models.py:2044
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2056
+#: stock/models.py:2050
msgid "Test notes"
msgstr ""
@@ -6599,7 +6618,7 @@ msgid "Available Quantity"
msgstr ""
#: stock/templates/stock/item_base.html:392
-#: templates/js/translated/build.js:1729
+#: templates/js/translated/build.js:1745
msgid "No location set"
msgstr "Konum ayarlanmadı"
@@ -6613,7 +6632,7 @@ msgid "This StockItem expired on %(item.expiry_date)s"
msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erdi"
#: stock/templates/stock/item_base.html:431
-#: templates/js/translated/table_filters.js:269
+#: templates/js/translated/table_filters.js:277
msgid "Expired"
msgstr ""
@@ -6623,7 +6642,7 @@ msgid "This StockItem expires on %(item.expiry_date)s"
msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erecek"
#: stock/templates/stock/item_base.html:433
-#: templates/js/translated/table_filters.js:275
+#: templates/js/translated/table_filters.js:283
msgid "Stale"
msgstr ""
@@ -7433,64 +7452,64 @@ msgstr ""
msgid "Do you really want to remove the selected email address?"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:27
+#: templates/InvenTree/settings/user_display.html:28
msgid "Theme Settings"
msgstr "Tema Ayarları"
-#: templates/InvenTree/settings/user_display.html:37
+#: templates/InvenTree/settings/user_display.html:38
msgid "Select theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:48
+#: templates/InvenTree/settings/user_display.html:49
msgid "Set Theme"
msgstr "Tema Seç"
-#: templates/InvenTree/settings/user_display.html:56
+#: templates/InvenTree/settings/user_display.html:57
msgid "Language Settings"
msgstr "Dil Ayarları"
-#: templates/InvenTree/settings/user_display.html:65
+#: templates/InvenTree/settings/user_display.html:66
msgid "Select language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:81
+#: templates/InvenTree/settings/user_display.html:82
#, python-format
msgid "%(lang_translated)s%% translated"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:83
+#: templates/InvenTree/settings/user_display.html:84
msgid "No translations available"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:90
+#: templates/InvenTree/settings/user_display.html:91
msgid "Set Language"
msgstr "Dili Ayarla"
-#: templates/InvenTree/settings/user_display.html:93
+#: templates/InvenTree/settings/user_display.html:94
msgid "Some languages are not complete"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:95
+#: templates/InvenTree/settings/user_display.html:96
msgid "Show only sufficent"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "and hidden."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "Show them too"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:104
+#: templates/InvenTree/settings/user_display.html:105
msgid "Help the translation efforts!"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:105
+#: templates/InvenTree/settings/user_display.html:106
msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:106
+#: templates/InvenTree/settings/user_display.html:107
msgid "InvenTree Translation Project"
msgstr ""
@@ -7787,7 +7806,7 @@ msgid "The following parts are low on required stock"
msgstr ""
#: templates/email/build_order_required_stock.html:18
-#: templates/js/translated/bom.js:1489
+#: templates/js/translated/bom.js:1506
msgid "Required Quantity"
msgstr ""
@@ -7801,7 +7820,7 @@ msgid "Click on the following link to view this part"
msgstr ""
#: templates/email/low_stock_notification.html:19
-#: templates/js/translated/part.js:2563
+#: templates/js/translated/part.js:2562
msgid "Minimum Quantity"
msgstr ""
@@ -7999,7 +8018,7 @@ msgstr ""
msgid "Row Data"
msgstr ""
-#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:620
+#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
#: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601
#: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003
#: templates/js/translated/order.js:1179 templates/modals.html:15
@@ -8069,117 +8088,118 @@ msgstr ""
msgid "Include part supplier data in exported BOM"
msgstr "Dışa aktarılan malzeme listesine parça tedarikçisi verilerini dahil edin"
-#: templates/js/translated/bom.js:511
+#: templates/js/translated/bom.js:512
msgid "Remove substitute part"
msgstr ""
-#: templates/js/translated/bom.js:565
+#: templates/js/translated/bom.js:566
msgid "Select and add a new substitute part using the input below"
msgstr ""
-#: templates/js/translated/bom.js:576
+#: templates/js/translated/bom.js:577
msgid "Are you sure you wish to remove this substitute part link?"
msgstr ""
-#: templates/js/translated/bom.js:582
+#: templates/js/translated/bom.js:583
msgid "Remove Substitute Part"
msgstr ""
-#: templates/js/translated/bom.js:621
+#: templates/js/translated/bom.js:622
msgid "Add Substitute"
msgstr ""
-#: templates/js/translated/bom.js:622
+#: templates/js/translated/bom.js:623
msgid "Edit BOM Item Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:684
+#: templates/js/translated/bom.js:685
msgid "All selected BOM items will be deleted"
msgstr ""
-#: templates/js/translated/bom.js:700
+#: templates/js/translated/bom.js:701
msgid "Delete selected BOM items?"
msgstr ""
-#: templates/js/translated/bom.js:819
+#: templates/js/translated/bom.js:835
msgid "Load BOM for subassembly"
msgstr ""
-#: templates/js/translated/bom.js:829
+#: templates/js/translated/bom.js:845
msgid "Substitutes Available"
msgstr ""
-#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1805
+#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821
msgid "Variant stock allowed"
msgstr ""
-#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1857
+#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872
#: templates/js/translated/order.js:3932
msgid "No Stock Available"
msgstr ""
-#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1861
+#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876
msgid "Includes variant and substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1863
-#: templates/js/translated/part.js:761 templates/js/translated/part.js:1538
+#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878
+#: templates/js/translated/part.js:761 templates/js/translated/part.js:1537
msgid "Includes variant stock"
msgstr ""
-#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1865
+#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880
msgid "Includes substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:962
+#: templates/js/translated/bom.js:985
msgid "Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:977
-msgid "Purchase Price Range"
-msgstr ""
-
-#: templates/js/translated/bom.js:984
-msgid "Purchase Price Average"
-msgstr ""
-
-#: templates/js/translated/bom.js:1033 templates/js/translated/bom.js:1153
+#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170
msgid "View BOM"
msgstr ""
-#: templates/js/translated/bom.js:1060
-msgid "Including On Order"
+#: templates/js/translated/bom.js:1046
+msgid "Purchase Price Range"
msgstr ""
-#: templates/js/translated/bom.js:1124
+#: templates/js/translated/bom.js:1053
+msgid "Purchase Price Average"
+msgstr ""
+
+#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863
+#: templates/js/translated/build.js:1947
+msgid "Consumable item"
+msgstr ""
+
+#: templates/js/translated/bom.js:1141
msgid "Validate BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1126
+#: templates/js/translated/bom.js:1143
msgid "This line has been validated"
msgstr ""
-#: templates/js/translated/bom.js:1128
+#: templates/js/translated/bom.js:1145
msgid "Edit substitute parts"
msgstr ""
-#: templates/js/translated/bom.js:1130 templates/js/translated/bom.js:1292
+#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1309
msgid "Edit BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1132
+#: templates/js/translated/bom.js:1149
msgid "Delete BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1650
+#: templates/js/translated/bom.js:1245 templates/js/translated/build.js:1666
msgid "No BOM items found"
msgstr ""
-#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1789
+#: templates/js/translated/bom.js:1489 templates/js/translated/build.js:1805
msgid "Required Part"
msgstr "Gerekli Parça"
-#: templates/js/translated/bom.js:1498
+#: templates/js/translated/bom.js:1515
msgid "Inherited from parent BOM"
msgstr ""
@@ -8207,256 +8227,260 @@ msgstr ""
msgid "There are incomplete outputs remaining for this build order"
msgstr ""
-#: templates/js/translated/build.js:217
+#: templates/js/translated/build.js:239
msgid "Build order is ready to be completed"
msgstr ""
-#: templates/js/translated/build.js:222
+#: templates/js/translated/build.js:247
+msgid "This build order cannot be completed as there are incomplete outputs"
+msgstr ""
+
+#: templates/js/translated/build.js:252
msgid "Build Order is incomplete"
msgstr "Yapım işi emri eksik"
-#: templates/js/translated/build.js:254
+#: templates/js/translated/build.js:270
msgid "Complete Build Order"
msgstr "Tamamlanmış Yapım İşi Emri"
-#: templates/js/translated/build.js:295 templates/js/translated/stock.js:92
+#: templates/js/translated/build.js:311 templates/js/translated/stock.js:92
#: templates/js/translated/stock.js:214
msgid "Next available serial number"
msgstr ""
-#: templates/js/translated/build.js:297 templates/js/translated/stock.js:94
+#: templates/js/translated/build.js:313 templates/js/translated/stock.js:94
#: templates/js/translated/stock.js:216
msgid "Latest serial number"
msgstr ""
-#: templates/js/translated/build.js:306
+#: templates/js/translated/build.js:322
msgid "The Bill of Materials contains trackable parts"
msgstr "Bu Malzeme Listesi takip edilebilir parçalar içeriyor"
-#: templates/js/translated/build.js:307
+#: templates/js/translated/build.js:323
msgid "Build outputs must be generated individually"
msgstr ""
-#: templates/js/translated/build.js:315
+#: templates/js/translated/build.js:331
msgid "Trackable parts can have serial numbers specified"
msgstr "Takip edilebilir parçaların seri numaraları belirtilmiş olmalı"
-#: templates/js/translated/build.js:316
+#: templates/js/translated/build.js:332
msgid "Enter serial numbers to generate multiple single build outputs"
msgstr "Birden çok tek yapım işi çıktısı oluşturmak için seri numaraları girin"
-#: templates/js/translated/build.js:323
+#: templates/js/translated/build.js:339
msgid "Create Build Output"
msgstr "Yapım İşi Çıktısı Oluştur"
-#: templates/js/translated/build.js:354
+#: templates/js/translated/build.js:370
msgid "Allocate stock items to this build output"
msgstr ""
-#: templates/js/translated/build.js:365
+#: templates/js/translated/build.js:381
msgid "Unallocate stock from build output"
msgstr ""
-#: templates/js/translated/build.js:374
+#: templates/js/translated/build.js:390
msgid "Complete build output"
msgstr ""
-#: templates/js/translated/build.js:382
+#: templates/js/translated/build.js:398
msgid "Delete build output"
msgstr ""
-#: templates/js/translated/build.js:405
+#: templates/js/translated/build.js:421
msgid "Are you sure you wish to unallocate stock items from this build?"
msgstr ""
-#: templates/js/translated/build.js:423
+#: templates/js/translated/build.js:439
msgid "Unallocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:443 templates/js/translated/build.js:595
+#: templates/js/translated/build.js:459 templates/js/translated/build.js:611
msgid "Select Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:444 templates/js/translated/build.js:596
+#: templates/js/translated/build.js:460 templates/js/translated/build.js:612
msgid "At least one build output must be selected"
msgstr ""
-#: templates/js/translated/build.js:498 templates/js/translated/build.js:650
+#: templates/js/translated/build.js:514 templates/js/translated/build.js:666
msgid "Output"
msgstr ""
-#: templates/js/translated/build.js:516
+#: templates/js/translated/build.js:532
msgid "Complete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:663
+#: templates/js/translated/build.js:679
msgid "Delete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:753
+#: templates/js/translated/build.js:769
msgid "No build order allocations found"
msgstr ""
-#: templates/js/translated/build.js:790
+#: templates/js/translated/build.js:806
msgid "Location not specified"
msgstr ""
-#: templates/js/translated/build.js:1169
+#: templates/js/translated/build.js:1185
msgid "No active build outputs found"
msgstr ""
-#: templates/js/translated/build.js:1238
+#: templates/js/translated/build.js:1254
msgid "Allocated Stock"
msgstr ""
-#: templates/js/translated/build.js:1245
+#: templates/js/translated/build.js:1261
msgid "No tracked BOM items for this build"
msgstr ""
-#: templates/js/translated/build.js:1267
+#: templates/js/translated/build.js:1283
msgid "Completed Tests"
msgstr ""
-#: templates/js/translated/build.js:1272
+#: templates/js/translated/build.js:1288
msgid "No required tests for this build"
msgstr ""
-#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2697
+#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727
#: templates/js/translated/order.js:3632
msgid "Edit stock allocation"
msgstr "Stok tahsisini düzenle"
-#: templates/js/translated/build.js:1748 templates/js/translated/build.js:2698
+#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728
#: templates/js/translated/order.js:3633
msgid "Delete stock allocation"
msgstr "Stok tahsisini sil"
-#: templates/js/translated/build.js:1766
+#: templates/js/translated/build.js:1782
msgid "Edit Allocation"
msgstr ""
-#: templates/js/translated/build.js:1776
+#: templates/js/translated/build.js:1792
msgid "Remove Allocation"
msgstr ""
-#: templates/js/translated/build.js:1801
+#: templates/js/translated/build.js:1817
msgid "Substitute parts available"
msgstr ""
-#: templates/js/translated/build.js:1818
+#: templates/js/translated/build.js:1834
msgid "Quantity Per"
msgstr ""
-#: templates/js/translated/build.js:1847 templates/js/translated/order.js:3939
+#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939
msgid "Insufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1849 templates/js/translated/order.js:3937
+#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937
msgid "Sufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1882 templates/js/translated/build.js:2127
-#: templates/js/translated/build.js:2693 templates/js/translated/order.js:3951
+#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157
+#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1930 templates/js/translated/order.js:4031
+#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031
msgid "Build stock"
msgstr ""
-#: templates/js/translated/build.js:1934 templates/stock_table.html:50
+#: templates/js/translated/build.js:1959 templates/stock_table.html:50
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1937 templates/js/translated/order.js:4024
+#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024
msgid "Allocate stock"
msgstr ""
-#: templates/js/translated/build.js:1976 templates/js/translated/label.js:172
+#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172
#: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr "Parçaları Seçin"
-#: templates/js/translated/build.js:1977 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2026 templates/js/translated/order.js:3108
+#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108
msgid "Specify stock allocation quantity"
msgstr ""
-#: templates/js/translated/build.js:2100
+#: templates/js/translated/build.js:2130
msgid "All Parts Allocated"
msgstr ""
-#: templates/js/translated/build.js:2101
+#: templates/js/translated/build.js:2131
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2115 templates/js/translated/order.js:3174
+#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
-#: templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2173
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2154 templates/js/translated/order.js:3271
+#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2226 templates/js/translated/order.js:3348
+#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348
msgid "No matching stock items"
msgstr ""
-#: templates/js/translated/build.js:2323
+#: templates/js/translated/build.js:2353
msgid "Automatic Stock Allocation"
msgstr ""
-#: templates/js/translated/build.js:2324
+#: templates/js/translated/build.js:2354
msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines"
msgstr ""
-#: templates/js/translated/build.js:2326
+#: templates/js/translated/build.js:2356
msgid "If a location is specifed, stock will only be allocated from that location"
msgstr ""
-#: templates/js/translated/build.js:2327
+#: templates/js/translated/build.js:2357
msgid "If stock is considered interchangeable, it will be allocated from the first location it is found"
msgstr ""
-#: templates/js/translated/build.js:2328
+#: templates/js/translated/build.js:2358
msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found"
msgstr ""
-#: templates/js/translated/build.js:2349
+#: templates/js/translated/build.js:2379
msgid "Allocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:2455
+#: templates/js/translated/build.js:2485
msgid "No builds matching query"
msgstr ""
-#: templates/js/translated/build.js:2490 templates/js/translated/part.js:1422
-#: templates/js/translated/part.js:1954 templates/js/translated/stock.js:1686
+#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421
+#: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686
#: templates/js/translated/stock.js:2384
msgid "Select"
msgstr ""
-#: templates/js/translated/build.js:2504
+#: templates/js/translated/build.js:2534
msgid "Build order is overdue"
msgstr ""
-#: templates/js/translated/build.js:2532
+#: templates/js/translated/build.js:2562
msgid "Progress"
msgstr ""
-#: templates/js/translated/build.js:2568 templates/js/translated/stock.js:2651
+#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2651
msgid "No user information"
msgstr ""
-#: templates/js/translated/build.js:2674
+#: templates/js/translated/build.js:2704
msgid "No parts allocated for"
msgstr ""
@@ -8644,23 +8668,23 @@ msgstr ""
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1922 templates/search.html:29
+#: templates/js/translated/forms.js:1923 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2175
+#: templates/js/translated/forms.js:2176
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2653
+#: templates/js/translated/forms.js:2654
msgid "Select Columns"
msgstr ""
@@ -8672,7 +8696,7 @@ msgstr ""
msgid "NO"
msgstr ""
-#: templates/js/translated/helpers.js:362
+#: templates/js/translated/helpers.js:363
msgid "Notes updated"
msgstr ""
@@ -9091,7 +9115,7 @@ msgstr ""
#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2503
#: templates/js/translated/order.js:3842 templates/js/translated/order.js:4350
-#: templates/js/translated/part.js:2196 templates/js/translated/part.js:2794
+#: templates/js/translated/part.js:2195 templates/js/translated/part.js:2793
msgid "Unit Price"
msgstr ""
@@ -9446,8 +9470,8 @@ msgstr ""
msgid "Copy Bill of Materials"
msgstr ""
-#: templates/js/translated/part.js:584 templates/js/translated/part.js:1520
-#: templates/js/translated/table_filters.js:468
+#: templates/js/translated/part.js:584 templates/js/translated/part.js:1519
+#: templates/js/translated/table_filters.js:476
msgid "Low stock"
msgstr ""
@@ -9483,140 +9507,140 @@ msgstr ""
msgid "Delete Part Relationship"
msgstr ""
-#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1608
+#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1607
msgid "No parts found"
msgstr ""
-#: templates/js/translated/part.js:1487
+#: templates/js/translated/part.js:1486
msgid "No category"
msgstr "Katagori Yok"
-#: templates/js/translated/part.js:1518
+#: templates/js/translated/part.js:1517
msgid "No stock"
msgstr ""
-#: templates/js/translated/part.js:1542
+#: templates/js/translated/part.js:1541
msgid "Allocated to build orders"
msgstr ""
-#: templates/js/translated/part.js:1546
+#: templates/js/translated/part.js:1545
msgid "Allocated to sales orders"
msgstr ""
-#: templates/js/translated/part.js:1632 templates/js/translated/part.js:1875
+#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1874
#: templates/js/translated/stock.js:2345
msgid "Display as list"
msgstr ""
-#: templates/js/translated/part.js:1648
+#: templates/js/translated/part.js:1647
msgid "Display as grid"
msgstr ""
-#: templates/js/translated/part.js:1714
+#: templates/js/translated/part.js:1713
msgid "Set the part category for the selected parts"
msgstr ""
-#: templates/js/translated/part.js:1719
+#: templates/js/translated/part.js:1718
msgid "Set Part Category"
msgstr ""
-#: templates/js/translated/part.js:1724
+#: templates/js/translated/part.js:1723
msgid "Select Part Category"
msgstr ""
-#: templates/js/translated/part.js:1737
+#: templates/js/translated/part.js:1736
msgid "Category is required"
msgstr ""
-#: templates/js/translated/part.js:1894 templates/js/translated/stock.js:2364
+#: templates/js/translated/part.js:1893 templates/js/translated/stock.js:2364
msgid "Display as tree"
msgstr ""
-#: templates/js/translated/part.js:1973
+#: templates/js/translated/part.js:1972
msgid "Load Subcategories"
msgstr ""
-#: templates/js/translated/part.js:1989
+#: templates/js/translated/part.js:1988
msgid "Subscribed category"
msgstr ""
-#: templates/js/translated/part.js:2053
+#: templates/js/translated/part.js:2052
msgid "No test templates matching query"
msgstr "Sorgu ile eşleşen test şablonu bulunamadı"
-#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1299
+#: templates/js/translated/part.js:2103 templates/js/translated/stock.js:1299
msgid "Edit test result"
msgstr ""
-#: templates/js/translated/part.js:2105 templates/js/translated/stock.js:1300
+#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1300
#: templates/js/translated/stock.js:1560
msgid "Delete test result"
msgstr ""
-#: templates/js/translated/part.js:2111
+#: templates/js/translated/part.js:2110
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/translated/part.js:2133
+#: templates/js/translated/part.js:2132
msgid "Edit Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2147
+#: templates/js/translated/part.js:2146
msgid "Delete Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2172
+#: templates/js/translated/part.js:2171
#, python-brace-format
msgid "No ${human_name} information found"
msgstr ""
-#: templates/js/translated/part.js:2229
+#: templates/js/translated/part.js:2228
#, python-brace-format
msgid "Edit ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2230
+#: templates/js/translated/part.js:2229
#, python-brace-format
msgid "Delete ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2395 templates/js/translated/part.js:2396
+#: templates/js/translated/part.js:2394 templates/js/translated/part.js:2395
msgid "No date specified"
msgstr ""
-#: templates/js/translated/part.js:2398
+#: templates/js/translated/part.js:2397
msgid "Specified date is in the past"
msgstr ""
-#: templates/js/translated/part.js:2404
+#: templates/js/translated/part.js:2403
msgid "Speculative"
msgstr ""
-#: templates/js/translated/part.js:2454
+#: templates/js/translated/part.js:2453
msgid "No scheduling information available for this part"
msgstr ""
-#: templates/js/translated/part.js:2460
+#: templates/js/translated/part.js:2459
msgid "Error fetching scheduling information for this part"
msgstr ""
-#: templates/js/translated/part.js:2556
+#: templates/js/translated/part.js:2555
msgid "Scheduled Stock Quantities"
msgstr ""
-#: templates/js/translated/part.js:2572
+#: templates/js/translated/part.js:2571
msgid "Maximum Quantity"
msgstr ""
-#: templates/js/translated/part.js:2617
+#: templates/js/translated/part.js:2616
msgid "Minimum Stock Level"
msgstr ""
-#: templates/js/translated/part.js:2718
+#: templates/js/translated/part.js:2717
msgid "Single Price"
msgstr ""
-#: templates/js/translated/part.js:2737
+#: templates/js/translated/part.js:2736
msgid "Single Price Difference"
msgstr ""
@@ -9979,7 +10003,7 @@ msgid "Stock item is destroyed"
msgstr ""
#: templates/js/translated/stock.js:1816
-#: templates/js/translated/table_filters.js:196
+#: templates/js/translated/table_filters.js:204
msgid "Depleted"
msgstr ""
@@ -10103,215 +10127,215 @@ msgstr ""
msgid "Allow Variant Stock"
msgstr "Çeşit Stokuna İzin Ver"
-#: templates/js/translated/table_filters.js:118
-#: templates/js/translated/table_filters.js:191
+#: templates/js/translated/table_filters.js:126
+#: templates/js/translated/table_filters.js:199
msgid "Include sublocations"
msgstr "Alt konumları dahil et"
-#: templates/js/translated/table_filters.js:119
+#: templates/js/translated/table_filters.js:127
msgid "Include locations"
msgstr "Konumları dahil et"
-#: templates/js/translated/table_filters.js:129
-#: templates/js/translated/table_filters.js:130
-#: templates/js/translated/table_filters.js:437
+#: templates/js/translated/table_filters.js:137
+#: templates/js/translated/table_filters.js:138
+#: templates/js/translated/table_filters.js:445
msgid "Include subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:134
-#: templates/js/translated/table_filters.js:480
+#: templates/js/translated/table_filters.js:142
+#: templates/js/translated/table_filters.js:488
msgid "Subscribed"
msgstr ""
-#: templates/js/translated/table_filters.js:144
-#: templates/js/translated/table_filters.js:226
+#: templates/js/translated/table_filters.js:152
+#: templates/js/translated/table_filters.js:234
msgid "Is Serialized"
msgstr "Seri Numaralı"
-#: templates/js/translated/table_filters.js:147
-#: templates/js/translated/table_filters.js:233
+#: templates/js/translated/table_filters.js:155
+#: templates/js/translated/table_filters.js:241
msgid "Serial number GTE"
msgstr "Seri numarası BvE"
-#: templates/js/translated/table_filters.js:148
-#: templates/js/translated/table_filters.js:234
+#: templates/js/translated/table_filters.js:156
+#: templates/js/translated/table_filters.js:242
msgid "Serial number greater than or equal to"
msgstr "Seri numarası büyük veya eşit"
-#: templates/js/translated/table_filters.js:151
-#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:159
+#: templates/js/translated/table_filters.js:245
msgid "Serial number LTE"
msgstr "Seri numarası KvE"
-#: templates/js/translated/table_filters.js:152
-#: templates/js/translated/table_filters.js:238
+#: templates/js/translated/table_filters.js:160
+#: templates/js/translated/table_filters.js:246
msgid "Serial number less than or equal to"
msgstr "Seri numarası küçük veya eşit"
-#: templates/js/translated/table_filters.js:155
-#: templates/js/translated/table_filters.js:156
-#: templates/js/translated/table_filters.js:229
-#: templates/js/translated/table_filters.js:230
+#: templates/js/translated/table_filters.js:163
+#: templates/js/translated/table_filters.js:164
+#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:238
msgid "Serial number"
msgstr "Seri numarası"
-#: templates/js/translated/table_filters.js:160
-#: templates/js/translated/table_filters.js:251
+#: templates/js/translated/table_filters.js:168
+#: templates/js/translated/table_filters.js:259
msgid "Batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:171
-#: templates/js/translated/table_filters.js:409
+#: templates/js/translated/table_filters.js:179
+#: templates/js/translated/table_filters.js:417
msgid "Active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:172
+#: templates/js/translated/table_filters.js:180
msgid "Show stock for active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:177
+#: templates/js/translated/table_filters.js:185
msgid "Part is an assembly"
msgstr ""
-#: templates/js/translated/table_filters.js:181
+#: templates/js/translated/table_filters.js:189
msgid "Is allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:182
+#: templates/js/translated/table_filters.js:190
msgid "Item has been allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:187
+#: templates/js/translated/table_filters.js:195
msgid "Stock is available for use"
msgstr ""
-#: templates/js/translated/table_filters.js:192
+#: templates/js/translated/table_filters.js:200
msgid "Include stock in sublocations"
msgstr "Alt konumlardaki stoku dahil et"
-#: templates/js/translated/table_filters.js:197
+#: templates/js/translated/table_filters.js:205
msgid "Show stock items which are depleted"
msgstr ""
-#: templates/js/translated/table_filters.js:202
+#: templates/js/translated/table_filters.js:210
msgid "Show items which are in stock"
msgstr ""
-#: templates/js/translated/table_filters.js:206
+#: templates/js/translated/table_filters.js:214
msgid "In Production"
msgstr ""
-#: templates/js/translated/table_filters.js:207
+#: templates/js/translated/table_filters.js:215
msgid "Show items which are in production"
msgstr ""
-#: templates/js/translated/table_filters.js:211
+#: templates/js/translated/table_filters.js:219
msgid "Include Variants"
msgstr "Çeşitleri Dahil Et"
-#: templates/js/translated/table_filters.js:212
+#: templates/js/translated/table_filters.js:220
msgid "Include stock items for variant parts"
msgstr "Çeşit parçaların stok kalemlerini dahil et"
-#: templates/js/translated/table_filters.js:216
+#: templates/js/translated/table_filters.js:224
msgid "Installed"
msgstr ""
-#: templates/js/translated/table_filters.js:217
+#: templates/js/translated/table_filters.js:225
msgid "Show stock items which are installed in another item"
msgstr ""
-#: templates/js/translated/table_filters.js:222
+#: templates/js/translated/table_filters.js:230
msgid "Show items which have been assigned to a customer"
msgstr ""
-#: templates/js/translated/table_filters.js:242
-#: templates/js/translated/table_filters.js:243
+#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:251
msgid "Stock status"
msgstr ""
-#: templates/js/translated/table_filters.js:246
+#: templates/js/translated/table_filters.js:254
msgid "Has batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:254
+#: templates/js/translated/table_filters.js:262
msgid "Tracked"
msgstr ""
-#: templates/js/translated/table_filters.js:255
+#: templates/js/translated/table_filters.js:263
msgid "Stock item is tracked by either batch code or serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:260
+#: templates/js/translated/table_filters.js:268
msgid "Has purchase price"
msgstr ""
-#: templates/js/translated/table_filters.js:261
+#: templates/js/translated/table_filters.js:269
msgid "Show stock items which have a purchase price set"
msgstr ""
-#: templates/js/translated/table_filters.js:270
+#: templates/js/translated/table_filters.js:278
msgid "Show stock items which have expired"
msgstr ""
-#: templates/js/translated/table_filters.js:276
+#: templates/js/translated/table_filters.js:284
msgid "Show stock which is close to expiring"
msgstr ""
-#: templates/js/translated/table_filters.js:288
+#: templates/js/translated/table_filters.js:296
msgid "Test Passed"
msgstr ""
-#: templates/js/translated/table_filters.js:292
+#: templates/js/translated/table_filters.js:300
msgid "Include Installed Items"
msgstr ""
-#: templates/js/translated/table_filters.js:311
+#: templates/js/translated/table_filters.js:319
msgid "Build status"
msgstr ""
-#: templates/js/translated/table_filters.js:324
-#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:332
+#: templates/js/translated/table_filters.js:373
msgid "Assigned to me"
msgstr ""
-#: templates/js/translated/table_filters.js:341
-#: templates/js/translated/table_filters.js:352
-#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:349
+#: templates/js/translated/table_filters.js:360
+#: templates/js/translated/table_filters.js:390
msgid "Order status"
msgstr ""
-#: templates/js/translated/table_filters.js:357
-#: templates/js/translated/table_filters.js:374
-#: templates/js/translated/table_filters.js:387
+#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:395
msgid "Outstanding"
msgstr ""
-#: templates/js/translated/table_filters.js:438
+#: templates/js/translated/table_filters.js:446
msgid "Include parts in subcategories"
msgstr "Alt kategorilerdeki parçaları dahil et"
-#: templates/js/translated/table_filters.js:443
+#: templates/js/translated/table_filters.js:451
msgid "Show active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:451
+#: templates/js/translated/table_filters.js:459
msgid "Available stock"
msgstr ""
-#: templates/js/translated/table_filters.js:459
+#: templates/js/translated/table_filters.js:467
msgid "Has IPN"
msgstr "DPN Var"
-#: templates/js/translated/table_filters.js:460
+#: templates/js/translated/table_filters.js:468
msgid "Part has internal part number"
msgstr ""
-#: templates/js/translated/table_filters.js:464
+#: templates/js/translated/table_filters.js:472
msgid "In stock"
msgstr ""
-#: templates/js/translated/table_filters.js:472
+#: templates/js/translated/table_filters.js:480
msgid "Purchasable"
msgstr ""
diff --git a/InvenTree/locale/vi/LC_MESSAGES/django.po b/InvenTree/locale/vi/LC_MESSAGES/django.po
index b43309f02a..ac0c4391d1 100644
--- a/InvenTree/locale/vi/LC_MESSAGES/django.po
+++ b/InvenTree/locale/vi/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-20 09:03+0000\n"
-"PO-Revision-Date: 2022-09-21 00:45\n"
+"POT-Creation-Date: 2022-09-24 13:47+0000\n"
+"PO-Revision-Date: 2022-09-25 01:07\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Language: vi_VN\n"
@@ -36,11 +36,11 @@ msgstr ""
#: order/templates/order/so_sidebar.html:17
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:172
-#: stock/models.py:1947 stock/models.py:2055 stock/serializers.py:327
+#: stock/models.py:1941 stock/models.py:2049 stock/serializers.py:327
#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823
#: stock/serializers.py:922 stock/serializers.py:1054
#: stock/templates/stock/stock_sidebar.html:25
-#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1107
+#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1121
#: templates/js/translated/company.js:1022
#: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555
#: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004
@@ -168,117 +168,117 @@ msgstr ""
msgid "Remove HTML tags from this value"
msgstr ""
-#: InvenTree/models.py:236
+#: InvenTree/models.py:238
msgid "Improperly formatted pattern"
msgstr ""
-#: InvenTree/models.py:243
+#: InvenTree/models.py:245
msgid "Unknown format key specified"
msgstr ""
-#: InvenTree/models.py:249
+#: InvenTree/models.py:251
msgid "Missing required format key"
msgstr ""
-#: InvenTree/models.py:261
+#: InvenTree/models.py:263
msgid "Reference field cannot be empty"
msgstr ""
-#: InvenTree/models.py:268
+#: InvenTree/models.py:270
msgid "Reference must match required pattern"
msgstr ""
-#: InvenTree/models.py:304
+#: InvenTree/models.py:306
msgid "Reference number is too large"
msgstr ""
-#: InvenTree/models.py:382
+#: InvenTree/models.py:384
msgid "Missing file"
msgstr ""
-#: InvenTree/models.py:383
+#: InvenTree/models.py:385
msgid "Missing external link"
msgstr ""
-#: InvenTree/models.py:395 stock/models.py:2049
+#: InvenTree/models.py:405 stock/models.py:2043
#: templates/js/translated/attachment.js:103
#: templates/js/translated/attachment.js:241
msgid "Attachment"
msgstr ""
-#: InvenTree/models.py:396
+#: InvenTree/models.py:406
msgid "Select file to attach"
msgstr ""
-#: InvenTree/models.py:402 company/models.py:124 company/models.py:276
+#: InvenTree/models.py:412 company/models.py:124 company/models.py:276
#: company/models.py:511 order/models.py:84 order/models.py:1249
#: part/models.py:802 part/templates/part/part_scheduling.html:11
#: report/templates/report/inventree_build_order_base.html:164
#: templates/js/translated/company.js:691
#: templates/js/translated/company.js:1011
-#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1568
+#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567
msgid "Link"
msgstr ""
-#: InvenTree/models.py:403 build/models.py:285 part/models.py:803
-#: stock/models.py:605
+#: InvenTree/models.py:413 build/models.py:285 part/models.py:803
+#: stock/models.py:604
msgid "Link to external URL"
msgstr ""
-#: InvenTree/models.py:406 templates/js/translated/attachment.js:104
+#: InvenTree/models.py:416 templates/js/translated/attachment.js:104
#: templates/js/translated/attachment.js:285
msgid "Comment"
msgstr "Bình luận"
-#: InvenTree/models.py:406
+#: InvenTree/models.py:416
msgid "File comment"
msgstr ""
-#: InvenTree/models.py:412 InvenTree/models.py:413 common/models.py:1669
-#: common/models.py:1670 common/models.py:1893 common/models.py:1894
-#: common/models.py:2156 common/models.py:2157 part/models.py:2235
-#: part/models.py:2255 plugin/models.py:260 plugin/models.py:261
+#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679
+#: common/models.py:1680 common/models.py:1903 common/models.py:1904
+#: common/models.py:2166 common/models.py:2167 part/models.py:2240
+#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2645
msgid "User"
msgstr "Người dùng"
-#: InvenTree/models.py:416
+#: InvenTree/models.py:426
msgid "upload date"
msgstr "Ngày tải lên"
-#: InvenTree/models.py:438
+#: InvenTree/models.py:448
msgid "Filename must not be empty"
msgstr "Tên tập tin không được để trống"
-#: InvenTree/models.py:447
+#: InvenTree/models.py:457
msgid "Invalid attachment directory"
msgstr ""
-#: InvenTree/models.py:457
+#: InvenTree/models.py:467
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr ""
-#: InvenTree/models.py:460
+#: InvenTree/models.py:470
msgid "Filename missing extension"
msgstr ""
-#: InvenTree/models.py:467
+#: InvenTree/models.py:477
msgid "Attachment with this filename already exists"
msgstr ""
-#: InvenTree/models.py:474
+#: InvenTree/models.py:484
msgid "Error renaming file"
msgstr ""
-#: InvenTree/models.py:510
+#: InvenTree/models.py:520
msgid "Invalid choice"
msgstr ""
-#: InvenTree/models.py:547 InvenTree/models.py:548 common/models.py:1879
+#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889
#: company/models.py:358 label/models.py:101 part/models.py:746
-#: part/models.py:2413 plugin/models.py:94 report/models.py:152
+#: part/models.py:2418 plugin/models.py:94 report/models.py:152
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin.html:134
@@ -288,16 +288,16 @@ msgstr ""
#: templates/js/translated/company.js:793
#: templates/js/translated/notification.js:71
#: templates/js/translated/part.js:686 templates/js/translated/part.js:838
-#: templates/js/translated/part.js:1961 templates/js/translated/stock.js:2390
+#: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2390
msgid "Name"
msgstr ""
-#: InvenTree/models.py:554 build/models.py:163
+#: InvenTree/models.py:564 build/models.py:163
#: build/templates/build/detail.html:24 company/models.py:282
#: company/models.py:517 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
#: company/templates/company/supplier_part.html:108 label/models.py:108
-#: order/models.py:82 part/models.py:769 part/models.py:2425
+#: order/models.py:82 part/models.py:769 part/models.py:2430
#: part/templates/part/category.html:80 part/templates/part/part_base.html:172
#: part/templates/part/part_scheduling.html:12 report/models.py:165
#: report/models.py:507 report/models.py:551
@@ -305,60 +305,60 @@ msgstr ""
#: stock/templates/stock/location.html:113
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/InvenTree/settings/settings.html:358
-#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:846
-#: templates/js/translated/build.js:2512 templates/js/translated/company.js:444
+#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862
+#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444
#: templates/js/translated/company.js:702
#: templates/js/translated/company.js:986 templates/js/translated/order.js:1988
#: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831
#: templates/js/translated/part.js:745 templates/js/translated/part.js:1187
-#: templates/js/translated/part.js:1463 templates/js/translated/part.js:1997
-#: templates/js/translated/part.js:2072 templates/js/translated/stock.js:1744
+#: templates/js/translated/part.js:1462 templates/js/translated/part.js:1996
+#: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1744
#: templates/js/translated/stock.js:2422 templates/js/translated/stock.js:2482
msgid "Description"
msgstr "Mô tả"
-#: InvenTree/models.py:555
+#: InvenTree/models.py:565
msgid "Description (optional)"
msgstr "Mô tả (tùy chọn)"
-#: InvenTree/models.py:563
+#: InvenTree/models.py:573
msgid "parent"
msgstr ""
-#: InvenTree/models.py:570 InvenTree/models.py:571
-#: templates/js/translated/part.js:2006 templates/js/translated/stock.js:2431
+#: InvenTree/models.py:580 InvenTree/models.py:581
+#: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2431
msgid "Path"
msgstr ""
-#: InvenTree/models.py:672
+#: InvenTree/models.py:682
msgid "Barcode Data"
msgstr ""
-#: InvenTree/models.py:673
+#: InvenTree/models.py:683
msgid "Third party barcode data"
msgstr ""
-#: InvenTree/models.py:678 order/serializers.py:486
+#: InvenTree/models.py:688 order/serializers.py:486
msgid "Barcode Hash"
msgstr ""
-#: InvenTree/models.py:679
+#: InvenTree/models.py:689
msgid "Unique hash of barcode data"
msgstr ""
-#: InvenTree/models.py:724
+#: InvenTree/models.py:734
msgid "Existing barcode found"
msgstr ""
-#: InvenTree/models.py:777
+#: InvenTree/models.py:787
msgid "Server Error"
msgstr ""
-#: InvenTree/models.py:778
+#: InvenTree/models.py:788
msgid "An error has been logged by the server."
msgstr ""
-#: InvenTree/serializers.py:55 part/models.py:2741
+#: InvenTree/serializers.py:55 part/models.py:2766
msgid "Must be a valid number"
msgstr ""
@@ -538,7 +538,7 @@ msgid "InvenTree system health checks failed"
msgstr ""
#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140
-#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:334
+#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:342
msgid "Pending"
msgstr ""
@@ -660,7 +660,7 @@ msgstr ""
msgid "Converted to variant"
msgstr ""
-#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:221
+#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:229
msgid "Sent to customer"
msgstr ""
@@ -755,7 +755,7 @@ msgstr ""
#: report/templates/report/inventree_build_order_base.html:105
#: templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
-#: templates/js/translated/build.js:764
+#: templates/js/translated/build.js:780
msgid "Build Order"
msgstr "Tạo đơn hàng"
@@ -774,12 +774,12 @@ msgid "Build Order Reference"
msgstr ""
#: build/models.py:155 order/models.py:240 order/models.py:627
-#: order/models.py:908 part/models.py:2659
+#: order/models.py:908 part/models.py:2676
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
-#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:853
-#: templates/js/translated/build.js:1813 templates/js/translated/order.js:2251
+#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872
+#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251
#: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823
#: templates/js/translated/order.js:4331
msgid "Reference"
@@ -801,10 +801,10 @@ msgstr ""
#: build/models.py:180 build/templates/build/build_base.html:80
#: build/templates/build/detail.html:29 company/models.py:679
#: order/models.py:1005 order/models.py:1116 order/models.py:1117
-#: part/models.py:343 part/models.py:2181 part/models.py:2196
-#: part/models.py:2215 part/models.py:2233 part/models.py:2332
-#: part/models.py:2459 part/models.py:2549 part/models.py:2634
-#: part/models.py:2910 part/serializers.py:814
+#: part/models.py:343 part/models.py:2186 part/models.py:2201
+#: part/models.py:2220 part/models.py:2238 part/models.py:2337
+#: part/models.py:2464 part/models.py:2556 part/models.py:2641
+#: part/models.py:2935 part/serializers.py:828
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/upload_bom.html:52
@@ -816,10 +816,10 @@ msgstr ""
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:16
#: templates/email/overdue_build_order.html:16
-#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:552
-#: templates/js/translated/bom.js:689 templates/js/translated/bom.js:800
-#: templates/js/translated/build.js:1189 templates/js/translated/build.js:1682
-#: templates/js/translated/build.js:2126 templates/js/translated/build.js:2517
+#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:553
+#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816
+#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698
+#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547
#: templates/js/translated/company.js:301
#: templates/js/translated/company.js:531
#: templates/js/translated/company.js:643
@@ -828,7 +828,7 @@ msgstr ""
#: templates/js/translated/order.js:2205 templates/js/translated/order.js:3185
#: templates/js/translated/order.js:3581 templates/js/translated/order.js:3807
#: templates/js/translated/part.js:1172 templates/js/translated/part.js:1244
-#: templates/js/translated/part.js:1441 templates/js/translated/stock.js:586
+#: templates/js/translated/part.js:1440 templates/js/translated/stock.js:586
#: templates/js/translated/stock.js:751 templates/js/translated/stock.js:958
#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2508
#: templates/js/translated/stock.js:2703 templates/js/translated/stock.js:2837
@@ -847,8 +847,8 @@ msgstr ""
msgid "SalesOrder to which this build is allocated"
msgstr ""
-#: build/models.py:202 build/serializers.py:800
-#: templates/js/translated/build.js:2114 templates/js/translated/order.js:3173
+#: build/models.py:202 build/serializers.py:819
+#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173
msgid "Source Location"
msgstr ""
@@ -889,7 +889,7 @@ msgid "Build status code"
msgstr ""
#: build/models.py:240 build/serializers.py:225 order/serializers.py:464
-#: stock/models.py:609 templates/js/translated/order.js:1496
+#: stock/models.py:608 templates/js/translated/order.js:1496
msgid "Batch Code"
msgstr ""
@@ -911,7 +911,7 @@ msgid "Target date for build completion. Build will be overdue after this date."
msgstr ""
#: build/models.py:255 order/models.py:286
-#: templates/js/translated/build.js:2594
+#: templates/js/translated/build.js:2624
msgid "Completion Date"
msgstr "Ngày hoàn thành"
@@ -919,7 +919,7 @@ msgstr "Ngày hoàn thành"
msgid "completed by"
msgstr ""
-#: build/models.py:269 templates/js/translated/build.js:2562
+#: build/models.py:269 templates/js/translated/build.js:2592
msgid "Issued by"
msgstr ""
@@ -932,7 +932,7 @@ msgstr ""
#: order/templates/order/order_base.html:185
#: order/templates/order/sales_order_base.html:183 part/models.py:942
#: report/templates/report/inventree_build_order_base.html:158
-#: templates/js/translated/build.js:2574 templates/js/translated/order.js:2022
+#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022
msgid "Responsible"
msgstr ""
@@ -943,7 +943,7 @@ msgstr ""
#: build/models.py:284 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:188
-#: part/templates/part/part_base.html:359 stock/models.py:603
+#: part/templates/part/part_base.html:359 stock/models.py:602
#: stock/templates/stock/item_base.html:203
msgid "External Link"
msgstr ""
@@ -973,48 +973,48 @@ msgstr ""
msgid "Build output does not match Build Order"
msgstr ""
-#: build/models.py:1158
+#: build/models.py:1167
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr ""
-#: build/models.py:1167
+#: build/models.py:1176
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr ""
-#: build/models.py:1177 order/models.py:1383
+#: build/models.py:1186 order/models.py:1383
msgid "Stock item is over-allocated"
msgstr ""
-#: build/models.py:1183 order/models.py:1386
+#: build/models.py:1192 order/models.py:1386
msgid "Allocation quantity must be greater than zero"
msgstr ""
-#: build/models.py:1189
+#: build/models.py:1198
msgid "Quantity must be 1 for serialized stock"
msgstr ""
-#: build/models.py:1246
+#: build/models.py:1255
msgid "Selected stock item not found in BOM"
msgstr ""
-#: build/models.py:1315 stock/templates/stock/item_base.html:175
-#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2496
+#: build/models.py:1324 stock/templates/stock/item_base.html:175
+#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526
#: templates/navbar.html:38
msgid "Build"
msgstr ""
-#: build/models.py:1316
+#: build/models.py:1325
msgid "Build to allocate parts"
msgstr ""
-#: build/models.py:1332 build/serializers.py:645 order/serializers.py:1035
+#: build/models.py:1341 build/serializers.py:660 order/serializers.py:1035
#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754
#: stock/serializers.py:880 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:197
-#: templates/js/translated/build.js:774 templates/js/translated/build.js:779
-#: templates/js/translated/build.js:2128 templates/js/translated/build.js:2679
+#: templates/js/translated/build.js:790 templates/js/translated/build.js:795
+#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709
#: templates/js/translated/order.js:107 templates/js/translated/order.js:3186
#: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493
#: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680
@@ -1023,18 +1023,18 @@ msgstr ""
msgid "Stock Item"
msgstr ""
-#: build/models.py:1333
+#: build/models.py:1342
msgid "Source stock item"
msgstr ""
-#: build/models.py:1345 build/serializers.py:193
+#: build/models.py:1354 build/serializers.py:193
#: build/templates/build/build_base.html:85
-#: build/templates/build/detail.html:34 common/models.py:1701
+#: build/templates/build/detail.html:34 common/models.py:1711
#: company/templates/company/supplier_part.html:341 order/models.py:901
#: order/models.py:1427 order/serializers.py:1209
#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40
-#: part/models.py:2650 part/templates/part/detail.html:951
-#: part/templates/part/detail.html:1037
+#: part/models.py:2657 part/templates/part/detail.html:950
+#: part/templates/part/detail.html:1036
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
#: report/templates/report/inventree_build_order_base.html:113
@@ -1045,39 +1045,39 @@ msgstr ""
#: stock/serializers.py:291 stock/templates/stock/item_base.html:290
#: stock/templates/stock/item_base.html:298
#: templates/email/build_order_completed.html:18
-#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:691
-#: templates/js/translated/bom.js:861 templates/js/translated/build.js:458
-#: templates/js/translated/build.js:610 templates/js/translated/build.js:801
-#: templates/js/translated/build.js:1211 templates/js/translated/build.js:1708
-#: templates/js/translated/build.js:2129
+#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:692
+#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474
+#: templates/js/translated/build.js:626 templates/js/translated/build.js:817
+#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724
+#: templates/js/translated/build.js:2159
#: templates/js/translated/model_renderers.js:120
#: templates/js/translated/order.js:123 templates/js/translated/order.js:1137
#: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490
#: templates/js/translated/order.js:3187 templates/js/translated/order.js:3507
#: templates/js/translated/order.js:3594 templates/js/translated/order.js:3686
#: templates/js/translated/order.js:3829 templates/js/translated/order.js:4337
-#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2217
-#: templates/js/translated/part.js:2686 templates/js/translated/part.js:2727
-#: templates/js/translated/part.js:2805 templates/js/translated/stock.js:458
+#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2216
+#: templates/js/translated/part.js:2685 templates/js/translated/part.js:2726
+#: templates/js/translated/part.js:2804 templates/js/translated/stock.js:458
#: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782
#: templates/js/translated/stock.js:2630 templates/js/translated/stock.js:2715
msgid "Quantity"
msgstr ""
-#: build/models.py:1346
+#: build/models.py:1355
msgid "Stock quantity to allocate to build"
msgstr ""
-#: build/models.py:1354
+#: build/models.py:1363
msgid "Install into"
msgstr ""
-#: build/models.py:1355
+#: build/models.py:1364
msgid "Destination stock item"
msgstr ""
-#: build/serializers.py:138 build/serializers.py:674
-#: templates/js/translated/build.js:1199
+#: build/serializers.py:138 build/serializers.py:689
+#: templates/js/translated/build.js:1215
msgid "Build Output"
msgstr ""
@@ -1101,9 +1101,9 @@ msgstr ""
msgid "Enter quantity for build output"
msgstr ""
-#: build/serializers.py:208 build/serializers.py:665 order/models.py:318
-#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:545
-#: part/serializers.py:977 stock/models.py:463 stock/models.py:1198
+#: build/serializers.py:208 build/serializers.py:680 order/models.py:318
+#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558
+#: part/serializers.py:991 stock/models.py:462 stock/models.py:1192
#: stock/serializers.py:300
msgid "Quantity must be greater than zero"
msgstr ""
@@ -1147,8 +1147,8 @@ msgstr ""
#: stock/serializers.py:915 stock/serializers.py:1148
#: stock/templates/stock/item_base.html:388
#: templates/js/translated/barcode.js:431
-#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:786
-#: templates/js/translated/build.js:1720 templates/js/translated/order.js:1534
+#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:802
+#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534
#: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605
#: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694
#: templates/js/translated/part.js:181 templates/js/translated/stock.js:588
@@ -1164,7 +1164,7 @@ msgstr ""
#: build/serializers.py:373 build/templates/build/build_base.html:145
#: build/templates/build/detail.html:62 order/models.py:646
#: order/serializers.py:482 stock/templates/stock/item_base.html:421
-#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2546
+#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2576
#: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992
#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1827
#: templates/js/translated/stock.js:2599 templates/js/translated/stock.js:2731
@@ -1203,113 +1203,113 @@ msgstr ""
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:494
+#: build/serializers.py:509
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:496
+#: build/serializers.py:511
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:506
+#: build/serializers.py:521
msgid "Some stock items have been overallocated"
msgstr ""
-#: build/serializers.py:511
+#: build/serializers.py:526
msgid "Accept Unallocated"
msgstr ""
-#: build/serializers.py:512
+#: build/serializers.py:527
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr ""
-#: build/serializers.py:522 templates/js/translated/build.js:227
+#: build/serializers.py:537 templates/js/translated/build.js:258
msgid "Required stock has not been fully allocated"
msgstr ""
-#: build/serializers.py:527 order/serializers.py:208 order/serializers.py:1103
+#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103
msgid "Accept Incomplete"
msgstr ""
-#: build/serializers.py:528
+#: build/serializers.py:543
msgid "Accept that the required number of build outputs have not been completed"
msgstr ""
-#: build/serializers.py:538 templates/js/translated/build.js:231
+#: build/serializers.py:553 templates/js/translated/build.js:262
msgid "Required build quantity has not been completed"
msgstr ""
-#: build/serializers.py:547
+#: build/serializers.py:562 templates/js/translated/build.js:246
msgid "Build order has incomplete outputs"
msgstr ""
-#: build/serializers.py:577 build/serializers.py:622 part/models.py:2768
-#: part/models.py:2902
+#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793
+#: part/models.py:2927
msgid "BOM Item"
msgstr ""
-#: build/serializers.py:587
+#: build/serializers.py:602
msgid "Build output"
msgstr ""
-#: build/serializers.py:595
+#: build/serializers.py:610
msgid "Build output must point to the same build"
msgstr ""
-#: build/serializers.py:636
+#: build/serializers.py:651
msgid "bom_item.part must point to the same part as the build order"
msgstr ""
-#: build/serializers.py:651 stock/serializers.py:767
+#: build/serializers.py:666 stock/serializers.py:767
msgid "Item must be in stock"
msgstr ""
-#: build/serializers.py:709 order/serializers.py:1093
+#: build/serializers.py:724 order/serializers.py:1093
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr ""
-#: build/serializers.py:715
+#: build/serializers.py:730
msgid "Build output must be specified for allocation of tracked parts"
msgstr ""
-#: build/serializers.py:722
+#: build/serializers.py:737
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr ""
-#: build/serializers.py:727
+#: build/serializers.py:742
msgid "This stock item has already been allocated to this build output"
msgstr ""
-#: build/serializers.py:750 order/serializers.py:1373
+#: build/serializers.py:765 order/serializers.py:1373
msgid "Allocation items must be provided"
msgstr ""
-#: build/serializers.py:801
+#: build/serializers.py:820
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr ""
-#: build/serializers.py:809
+#: build/serializers.py:828
msgid "Exclude Location"
msgstr ""
-#: build/serializers.py:810
+#: build/serializers.py:829
msgid "Exclude stock items from this selected location"
msgstr ""
-#: build/serializers.py:815
+#: build/serializers.py:834
msgid "Interchangeable Stock"
msgstr ""
-#: build/serializers.py:816
+#: build/serializers.py:835
msgid "Stock items in multiple locations can be used interchangeably"
msgstr ""
-#: build/serializers.py:821
+#: build/serializers.py:840
msgid "Substitute Stock"
msgstr ""
-#: build/serializers.py:822
+#: build/serializers.py:841
msgid "Allow allocation of substitute parts"
msgstr ""
@@ -1400,7 +1400,7 @@ msgstr ""
#: order/templates/order/order_base.html:171
#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:125
-#: templates/js/translated/build.js:2586 templates/js/translated/order.js:2009
+#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009
#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852
#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051
msgid "Target Date"
@@ -1415,16 +1415,16 @@ msgstr ""
#: build/templates/build/build_base.html:204
#: order/templates/order/order_base.html:107
#: order/templates/order/sales_order_base.html:94
-#: templates/js/translated/table_filters.js:320
-#: templates/js/translated/table_filters.js:361
-#: templates/js/translated/table_filters.js:391
+#: templates/js/translated/table_filters.js:328
+#: templates/js/translated/table_filters.js:369
+#: templates/js/translated/table_filters.js:399
msgid "Overdue"
msgstr ""
#: build/templates/build/build_base.html:166
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
#: order/templates/order/sales_order_base.html:171
-#: templates/js/translated/table_filters.js:400
+#: templates/js/translated/table_filters.js:408
msgid "Completed"
msgstr "Đã hoàn thành"
@@ -1447,7 +1447,7 @@ msgstr ""
msgid "Issued By"
msgstr ""
-#: build/templates/build/build_base.html:256
+#: build/templates/build/build_base.html:252
msgid "Delete Build Order"
msgstr ""
@@ -1478,19 +1478,19 @@ msgstr ""
#: build/templates/build/detail.html:80
#: stock/templates/stock/item_base.html:168
-#: templates/js/translated/build.js:1215
+#: templates/js/translated/build.js:1231
#: templates/js/translated/model_renderers.js:124
#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1841
#: templates/js/translated/stock.js:2738
-#: templates/js/translated/table_filters.js:159
-#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:167
+#: templates/js/translated/table_filters.js:258
msgid "Batch"
msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:158
#: order/templates/order/sales_order_base.html:158
-#: templates/js/translated/build.js:2554
+#: templates/js/translated/build.js:2584
msgid "Created"
msgstr ""
@@ -1510,7 +1510,7 @@ msgstr ""
msgid "Allocate Stock to Build"
msgstr ""
-#: build/templates/build/detail.html:176 templates/js/translated/build.js:1942
+#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967
msgid "Unallocate stock"
msgstr ""
@@ -1876,9 +1876,9 @@ msgstr ""
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:951 part/models.py:2461 report/models.py:158
+#: common/models.py:951 part/models.py:2466 report/models.py:158
#: templates/js/translated/table_filters.js:38
-#: templates/js/translated/table_filters.js:484
+#: templates/js/translated/table_filters.js:492
msgid "Template"
msgstr ""
@@ -1886,9 +1886,9 @@ msgstr ""
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1454
-#: templates/js/translated/table_filters.js:176
-#: templates/js/translated/table_filters.js:447
+#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1471
+#: templates/js/translated/table_filters.js:184
+#: templates/js/translated/table_filters.js:455
msgid "Assembly"
msgstr ""
@@ -1897,7 +1897,7 @@ msgid "Parts can be assembled from other components by default"
msgstr ""
#: common/models.py:965 part/models.py:900
-#: templates/js/translated/table_filters.js:455
+#: templates/js/translated/table_filters.js:463
msgid "Component"
msgstr ""
@@ -1914,7 +1914,7 @@ msgid "Parts are purchaseable by default"
msgstr ""
#: common/models.py:979 part/models.py:916
-#: templates/js/translated/table_filters.js:476
+#: templates/js/translated/table_filters.js:484
msgid "Salable"
msgstr ""
@@ -1924,8 +1924,8 @@ msgstr ""
#: common/models.py:986 part/models.py:906
#: templates/js/translated/table_filters.js:46
-#: templates/js/translated/table_filters.js:108
-#: templates/js/translated/table_filters.js:488
+#: templates/js/translated/table_filters.js:116
+#: templates/js/translated/table_filters.js:496
msgid "Trackable"
msgstr ""
@@ -1936,7 +1936,7 @@ msgstr ""
#: common/models.py:993 part/models.py:926
#: part/templates/part/part_base.html:156
#: templates/js/translated/table_filters.js:42
-#: templates/js/translated/table_filters.js:492
+#: templates/js/translated/table_filters.js:500
msgid "Virtual"
msgstr ""
@@ -2300,7 +2300,7 @@ msgstr ""
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1344 common/models.py:1662
+#: common/models.py:1344 common/models.py:1672
msgid "Settings key (must be unique - case insensitive"
msgstr ""
@@ -2616,101 +2616,109 @@ msgstr ""
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1702
+#: common/models.py:1647
+msgid "Table String Length"
+msgstr ""
+
+#: common/models.py:1648
+msgid "Maximimum length limit for strings displayed in table views"
+msgstr ""
+
+#: common/models.py:1712
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1709 company/serializers.py:372
+#: common/models.py:1719 company/serializers.py:372
#: company/templates/company/supplier_part.html:346 order/models.py:942
-#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2222
+#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221
msgid "Price"
msgstr ""
-#: common/models.py:1710
+#: common/models.py:1720
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1870 common/models.py:2048
+#: common/models.py:1880 common/models.py:2058
msgid "Endpoint"
msgstr ""
-#: common/models.py:1871
+#: common/models.py:1881
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1890
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1885 part/models.py:921 plugin/models.py:100
+#: common/models.py:1895 part/models.py:921 plugin/models.py:100
#: templates/js/translated/table_filters.js:34
-#: templates/js/translated/table_filters.js:104
-#: templates/js/translated/table_filters.js:316
-#: templates/js/translated/table_filters.js:442
+#: templates/js/translated/table_filters.js:112
+#: templates/js/translated/table_filters.js:324
+#: templates/js/translated/table_filters.js:450
msgid "Active"
msgstr ""
-#: common/models.py:1886
+#: common/models.py:1896
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1900
+#: common/models.py:1910
msgid "Token"
msgstr ""
-#: common/models.py:1901
+#: common/models.py:1911
msgid "Token for access"
msgstr ""
-#: common/models.py:1908
+#: common/models.py:1918
msgid "Secret"
msgstr ""
-#: common/models.py:1909
+#: common/models.py:1919
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:2015
+#: common/models.py:2025
msgid "Message ID"
msgstr ""
-#: common/models.py:2016
+#: common/models.py:2026
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:2024
+#: common/models.py:2034
msgid "Host"
msgstr ""
-#: common/models.py:2025
+#: common/models.py:2035
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:2032
+#: common/models.py:2042
msgid "Header"
msgstr ""
-#: common/models.py:2033
+#: common/models.py:2043
msgid "Header of this message"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2049
msgid "Body"
msgstr ""
-#: common/models.py:2040
+#: common/models.py:2050
msgid "Body of this message"
msgstr ""
-#: common/models.py:2049
+#: common/models.py:2059
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:2054
+#: common/models.py:2064
msgid "Worked on"
msgstr ""
-#: common/models.py:2055
+#: common/models.py:2065
msgid "Was the work on this message finished?"
msgstr ""
@@ -2859,9 +2867,9 @@ msgstr ""
msgid "Default currency used for this company"
msgstr ""
-#: company/models.py:248 company/models.py:482 stock/models.py:545
+#: company/models.py:248 company/models.py:482 stock/models.py:544
#: stock/serializers.py:85 stock/templates/stock/item_base.html:143
-#: templates/js/translated/bom.js:542
+#: templates/js/translated/bom.js:543
msgid "Base Part"
msgstr ""
@@ -2877,7 +2885,7 @@ msgstr ""
#: templates/js/translated/company.js:533
#: templates/js/translated/company.js:668
#: templates/js/translated/company.js:956 templates/js/translated/part.js:236
-#: templates/js/translated/table_filters.js:419
+#: templates/js/translated/table_filters.js:427
msgid "Manufacturer"
msgstr "Nhà sản xuất"
@@ -2920,7 +2928,7 @@ msgstr ""
#: company/models.py:365
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2042 templates/js/translated/company.js:581
+#: stock/models.py:2036 templates/js/translated/company.js:581
#: templates/js/translated/company.js:799 templates/js/translated/part.js:847
#: templates/js/translated/stock.js:1360
msgid "Value"
@@ -2930,7 +2938,7 @@ msgstr ""
msgid "Parameter value"
msgstr ""
-#: company/models.py:372 part/models.py:888 part/models.py:2421
+#: company/models.py:372 part/models.py:888 part/models.py:2426
#: part/templates/part/part_base.html:286
#: templates/InvenTree/settings/settings.html:352
#: templates/js/translated/company.js:805 templates/js/translated/part.js:853
@@ -2954,7 +2962,7 @@ msgstr ""
#: templates/js/translated/company.js:436
#: templates/js/translated/company.js:929 templates/js/translated/order.js:1975
#: templates/js/translated/part.js:217 templates/js/translated/part.js:993
-#: templates/js/translated/table_filters.js:423
+#: templates/js/translated/table_filters.js:431
msgid "Supplier"
msgstr "Nhà cung cấp"
@@ -2986,22 +2994,22 @@ msgid "Supplier part description"
msgstr ""
#: company/models.py:523 company/templates/company/supplier_part.html:181
-#: part/models.py:2662 part/templates/part/upload_bom.html:59
+#: part/models.py:2679 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399
msgid "Note"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "base cost"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:529 company/templates/company/supplier_part.html:167
-#: stock/models.py:571 stock/templates/stock/item_base.html:243
+#: stock/models.py:570 stock/templates/stock/item_base.html:243
#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1974
msgid "Packaging"
msgstr ""
@@ -3023,7 +3031,7 @@ msgstr ""
msgid "Unit quantity supplied in a single pack"
msgstr ""
-#: company/models.py:539 part/models.py:1771
+#: company/models.py:539 part/models.py:1776
msgid "multiple"
msgstr ""
@@ -3034,10 +3042,10 @@ msgstr ""
#: company/models.py:547 company/templates/company/supplier_part.html:115
#: templates/email/build_order_required_stock.html:19
#: templates/email/low_stock_notification.html:18
-#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1823
-#: templates/js/translated/build.js:2686 templates/js/translated/part.js:598
+#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839
+#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598
#: templates/js/translated/part.js:601
-#: templates/js/translated/table_filters.js:186
+#: templates/js/translated/table_filters.js:194
msgid "Available"
msgstr ""
@@ -3109,13 +3117,13 @@ msgid "Download image from URL"
msgstr ""
#: company/templates/company/company_base.html:86 order/models.py:641
-#: order/templates/order/sales_order_base.html:116 stock/models.py:590
-#: stock/models.py:591 stock/serializers.py:809
+#: order/templates/order/sales_order_base.html:116 stock/models.py:589
+#: stock/models.py:590 stock/serializers.py:809
#: stock/templates/stock/item_base.html:399
#: templates/email/overdue_sales_order.html:16
#: templates/js/translated/company.js:428 templates/js/translated/order.js:2813
#: templates/js/translated/stock.js:2563
-#: templates/js/translated/table_filters.js:427
+#: templates/js/translated/table_filters.js:435
msgid "Customer"
msgstr ""
@@ -3234,7 +3242,7 @@ msgid "New Sales Order"
msgstr ""
#: company/templates/company/detail.html:168
-#: templates/js/translated/build.js:1693
+#: templates/js/translated/build.js:1709
msgid "Assigned Stock"
msgstr ""
@@ -3312,7 +3320,7 @@ msgid "Delete parameters"
msgstr ""
#: company/templates/company/manufacturer_part.html:245
-#: part/templates/part/detail.html:840
+#: part/templates/part/detail.html:839
msgid "Add Parameter"
msgstr ""
@@ -3333,7 +3341,7 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:554
+#: company/templates/company/supplier_part.html:24 stock/models.py:553
#: stock/templates/stock/item_base.html:236
#: templates/js/translated/company.js:945 templates/js/translated/order.js:1135
#: templates/js/translated/stock.js:1931
@@ -3444,7 +3452,7 @@ msgstr ""
#: company/templates/company/supplier_part.html:247
#: company/templates/company/supplier_part.html:388
-#: part/templates/part/prices.html:276 templates/js/translated/part.js:2294
+#: part/templates/part/prices.html:276 templates/js/translated/part.js:2293
msgid "Add Price Break"
msgstr ""
@@ -3457,12 +3465,12 @@ msgid "No price break information found"
msgstr ""
#: company/templates/company/supplier_part.html:314
-#: templates/js/translated/part.js:2304
+#: templates/js/translated/part.js:2303
msgid "Delete Price Break"
msgstr ""
#: company/templates/company/supplier_part.html:328
-#: templates/js/translated/part.js:2318
+#: templates/js/translated/part.js:2317
msgid "Edit Price Break"
msgstr ""
@@ -3488,8 +3496,8 @@ msgstr ""
#: stock/templates/stock/stock_app_base.html:10
#: templates/InvenTree/search.html:153
#: templates/InvenTree/settings/sidebar.html:45
-#: templates/js/translated/part.js:749 templates/js/translated/part.js:1334
-#: templates/js/translated/part.js:1500 templates/js/translated/stock.js:959
+#: templates/js/translated/part.js:749 templates/js/translated/part.js:1333
+#: templates/js/translated/part.js:1499 templates/js/translated/stock.js:959
#: templates/js/translated/stock.js:1756 templates/navbar.html:31
msgid "Stock"
msgstr "Kiện hàng"
@@ -3793,7 +3801,7 @@ msgstr ""
#: order/models.py:1013 order/templates/order/order_base.html:178
#: templates/js/translated/order.js:1641 templates/js/translated/order.js:2373
#: templates/js/translated/part.js:1087 templates/js/translated/part.js:1125
-#: templates/js/translated/table_filters.js:338
+#: templates/js/translated/table_filters.js:346
msgid "Received"
msgstr ""
@@ -3801,7 +3809,7 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:681
+#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:680
#: stock/serializers.py:169 stock/templates/stock/item_base.html:189
#: templates/js/translated/stock.js:1962
msgid "Purchase Price"
@@ -4192,8 +4200,8 @@ msgstr ""
#: part/templates/part/import_wizard/ajax_match_fields.html:64
#: part/templates/part/import_wizard/ajax_match_references.html:42
#: part/templates/part/import_wizard/match_references.html:49
-#: templates/js/translated/bom.js:77 templates/js/translated/build.js:463
-#: templates/js/translated/build.js:615 templates/js/translated/build.js:2015
+#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479
+#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040
#: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586
#: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625
#: templates/js/translated/stock.js:793
@@ -4315,8 +4323,8 @@ msgid "Pending Shipments"
msgstr ""
#: order/templates/order/sales_order_detail.html:72
-#: templates/attachment_table.html:6 templates/js/translated/bom.js:1116
-#: templates/js/translated/build.js:1923
+#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133
+#: templates/js/translated/build.js:1943
msgid "Actions"
msgstr ""
@@ -4405,9 +4413,9 @@ msgid "Available Stock"
msgstr ""
#: part/bom.py:130 part/templates/part/part_base.html:213
-#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1853
+#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890
#: templates/js/translated/part.js:588 templates/js/translated/part.js:608
-#: templates/js/translated/part.js:1337 templates/js/translated/part.js:1525
+#: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524
#: templates/js/translated/table_filters.js:68
msgid "On Order"
msgstr ""
@@ -4436,7 +4444,7 @@ msgstr ""
msgid "Icon (optional)"
msgstr ""
-#: part/models.py:122 part/models.py:2504 part/templates/part/category.html:16
+#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr ""
@@ -4453,7 +4461,7 @@ msgstr ""
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84
#: templates/InvenTree/settings/sidebar.html:41
-#: templates/js/translated/part.js:2016 templates/js/translated/search.js:146
+#: templates/js/translated/part.js:2015 templates/js/translated/search.js:146
#: templates/navbar.html:24 users/models.py:38
msgid "Parts"
msgstr "Nguyên liệu"
@@ -4483,7 +4491,7 @@ msgstr ""
msgid "Duplicate IPN not allowed in part settings"
msgstr ""
-#: part/models.py:745 part/models.py:2558
+#: part/models.py:745 part/models.py:2565
msgid "Part name"
msgstr ""
@@ -4516,11 +4524,11 @@ msgstr ""
msgid "Part keywords to improve visibility in search results"
msgstr ""
-#: part/models.py:783 part/models.py:2253 part/models.py:2503
+#: part/models.py:783 part/models.py:2258 part/models.py:2508
#: part/templates/part/part_base.html:263
#: templates/InvenTree/settings/settings.html:232
#: templates/js/translated/notification.js:50
-#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1723
+#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1722
msgid "Category"
msgstr ""
@@ -4529,7 +4537,7 @@ msgid "Part category"
msgstr ""
#: part/models.py:789 part/templates/part/part_base.html:272
-#: templates/js/translated/part.js:737 templates/js/translated/part.js:1430
+#: templates/js/translated/part.js:737 templates/js/translated/part.js:1429
#: templates/js/translated/stock.js:1726
msgid "IPN"
msgstr ""
@@ -4631,249 +4639,260 @@ msgstr ""
msgid "Creation User"
msgstr ""
-#: part/models.py:1771
+#: part/models.py:1776
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2300
+#: part/models.py:2305
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2317
+#: part/models.py:2322
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2337 templates/js/translated/part.js:2067
+#: part/models.py:2342 templates/js/translated/part.js:2066
#: templates/js/translated/stock.js:1340
msgid "Test Name"
msgstr ""
-#: part/models.py:2338
+#: part/models.py:2343
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2343
+#: part/models.py:2348
msgid "Test Description"
msgstr ""
-#: part/models.py:2344
+#: part/models.py:2349
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2349 templates/js/translated/part.js:2076
-#: templates/js/translated/table_filters.js:302
+#: part/models.py:2354 templates/js/translated/part.js:2075
+#: templates/js/translated/table_filters.js:310
msgid "Required"
msgstr ""
-#: part/models.py:2350
+#: part/models.py:2355
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2355 templates/js/translated/part.js:2084
+#: part/models.py:2360 templates/js/translated/part.js:2083
msgid "Requires Value"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2361
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2361 templates/js/translated/part.js:2091
+#: part/models.py:2366 templates/js/translated/part.js:2090
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2367
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2370
+#: part/models.py:2375
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2406
+#: part/models.py:2411
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2414
+#: part/models.py:2419
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2421
+#: part/models.py:2426
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2426
+#: part/models.py:2431
msgid "Parameter description"
msgstr ""
-#: part/models.py:2459
+#: part/models.py:2464
msgid "Parent Part"
msgstr ""
-#: part/models.py:2461 part/models.py:2509 part/models.py:2510
+#: part/models.py:2466 part/models.py:2514 part/models.py:2515
#: templates/InvenTree/settings/settings.html:227
msgid "Parameter Template"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Data"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2514 templates/InvenTree/settings/settings.html:236
+#: part/models.py:2519 templates/InvenTree/settings/settings.html:236
msgid "Default Value"
msgstr ""
-#: part/models.py:2515
+#: part/models.py:2520
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2550
+#: part/models.py:2557
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2553 templates/js/translated/model_renderers.js:212
+#: part/models.py:2560 templates/js/translated/model_renderers.js:212
msgid "Part ID"
msgstr ""
-#: part/models.py:2554
+#: part/models.py:2561
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2557
+#: part/models.py:2564
msgid "Part Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2568
msgid "Part IPN"
msgstr ""
-#: part/models.py:2562
+#: part/models.py:2569
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2565
+#: part/models.py:2572
msgid "Level"
msgstr ""
-#: part/models.py:2566
+#: part/models.py:2573
msgid "BOM level"
msgstr ""
-#: part/models.py:2635
+#: part/models.py:2642
msgid "Select parent part"
msgstr ""
-#: part/models.py:2643
+#: part/models.py:2650
msgid "Sub part"
msgstr ""
-#: part/models.py:2644
+#: part/models.py:2651
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2650
+#: part/models.py:2657
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2652 part/templates/part/upload_bom.html:58
-#: templates/js/translated/bom.js:876 templates/js/translated/bom.js:1005
-#: templates/js/translated/table_filters.js:100
+#: part/models.py:2661 part/templates/part/upload_bom.html:58
+#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999
+#: templates/js/translated/table_filters.js:84
+#: templates/js/translated/table_filters.js:108
msgid "Optional"
msgstr ""
-#: part/models.py:2652
+#: part/models.py:2662
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2655 part/templates/part/upload_bom.html:55
+#: part/models.py:2667 templates/js/translated/bom.js:895
+#: templates/js/translated/bom.js:1008
+#: templates/js/translated/table_filters.js:88
+msgid "Consumable"
+msgstr ""
+
+#: part/models.py:2668
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:2672 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2656
+#: part/models.py:2673
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2659
+#: part/models.py:2676
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2662
+#: part/models.py:2679
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "Checksum"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2668 part/templates/part/upload_bom.html:57
-#: templates/js/translated/bom.js:1022
+#: part/models.py:2685 part/templates/part/upload_bom.html:57
+#: templates/js/translated/bom.js:1025
#: templates/js/translated/table_filters.js:76
-#: templates/js/translated/table_filters.js:96
+#: templates/js/translated/table_filters.js:104
msgid "Inherited"
msgstr ""
-#: part/models.py:2669
+#: part/models.py:2686
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2674 part/templates/part/upload_bom.html:56
-#: templates/js/translated/bom.js:1014
+#: part/models.py:2691 part/templates/part/upload_bom.html:56
+#: templates/js/translated/bom.js:1017
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2675
+#: part/models.py:2692
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2753 stock/models.py:447
+#: part/models.py:2778 stock/models.py:446
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2762 part/models.py:2764
+#: part/models.py:2787 part/models.py:2789
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2869
+#: part/models.py:2894
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:2890
+#: part/models.py:2915
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:2903
+#: part/models.py:2928
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:2911
+#: part/models.py:2936
msgid "Substitute part"
msgstr ""
-#: part/models.py:2926
+#: part/models.py:2951
msgid "Part 1"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Part 2"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2948
+#: part/models.py:2973
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:2952
+#: part/models.py:2977
msgid "Duplicate relationship already exists"
msgstr ""
@@ -4881,75 +4900,75 @@ msgstr ""
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:815
+#: part/serializers.py:829
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:823
+#: part/serializers.py:837
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:824
+#: part/serializers.py:838
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:829
+#: part/serializers.py:843
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:830
+#: part/serializers.py:844
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:835
+#: part/serializers.py:849
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:836
+#: part/serializers.py:850
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:841
+#: part/serializers.py:855
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:842
+#: part/serializers.py:856
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:882
+#: part/serializers.py:896
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:883
+#: part/serializers.py:897
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:913
+#: part/serializers.py:927
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:956
+#: part/serializers.py:970
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:959
+#: part/serializers.py:973
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:962
+#: part/serializers.py:976
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:971
+#: part/serializers.py:985
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:979
+#: part/serializers.py:993
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1000
+#: part/serializers.py:1014
msgid "At least one BOM item is required"
msgstr ""
@@ -5243,22 +5262,22 @@ msgstr ""
msgid "Add Test Result Template"
msgstr ""
-#: part/templates/part/detail.html:914
+#: part/templates/part/detail.html:913
#, python-format
msgid "Purchase Unit Price - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:926
+#: part/templates/part/detail.html:925
#, python-format
msgid "Unit Price-Cost Difference - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:938
+#: part/templates/part/detail.html:937
#, python-format
msgid "Supplier Unit Cost - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:1027
+#: part/templates/part/detail.html:1026
#, python-format
msgid "Unit Price - %(currency)s"
msgstr ""
@@ -5412,7 +5431,7 @@ msgstr ""
#: part/templates/part/part_base.html:200
#: templates/js/translated/company.js:1027
-#: templates/js/translated/table_filters.js:201
+#: templates/js/translated/table_filters.js:209
msgid "In Stock"
msgstr ""
@@ -5426,13 +5445,13 @@ msgstr ""
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1043
+#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075
msgid "Can Build"
msgstr ""
#: part/templates/part/part_base.html:244 templates/js/translated/part.js:591
-#: templates/js/translated/part.js:611 templates/js/translated/part.js:1341
-#: templates/js/translated/part.js:1532
+#: templates/js/translated/part.js:611 templates/js/translated/part.js:1340
+#: templates/js/translated/part.js:1531
msgid "Building"
msgstr ""
@@ -5488,7 +5507,7 @@ msgid "Total Cost"
msgstr ""
#: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43
-#: templates/js/translated/bom.js:997
+#: templates/js/translated/bom.js:1066
msgid "No supplier pricing available"
msgstr ""
@@ -5583,7 +5602,7 @@ msgstr ""
msgid "Calculation parameters"
msgstr ""
-#: part/templates/part/prices.html:160 templates/js/translated/bom.js:991
+#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060
msgid "Supplier Cost"
msgstr ""
@@ -5622,7 +5641,7 @@ msgid "No sale pice history available for this part."
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:614
-#: templates/js/translated/part.js:1329 templates/js/translated/part.js:1331
+#: templates/js/translated/part.js:1328 templates/js/translated/part.js:1330
msgid "No Stock"
msgstr ""
@@ -5993,9 +6012,9 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:595 stock/templates/stock/item_base.html:320
-#: templates/js/translated/build.js:456 templates/js/translated/build.js:608
-#: templates/js/translated/build.js:1209 templates/js/translated/build.js:1706
+#: stock/models.py:594 stock/templates/stock/item_base.html:320
+#: templates/js/translated/build.js:472 templates/js/translated/build.js:624
+#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722
#: templates/js/translated/model_renderers.js:118
#: templates/js/translated/order.js:121 templates/js/translated/order.js:3597
#: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490
@@ -6007,12 +6026,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2030
+#: stock/models.py:2024
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2036
+#: stock/models.py:2030
msgid "Result"
msgstr ""
@@ -6047,241 +6066,241 @@ msgstr ""
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:90 stock/models.py:686
+#: stock/models.py:90 stock/models.py:685
#: stock/templates/stock/item_base.html:250
msgid "Owner"
msgstr ""
-#: stock/models.py:91 stock/models.py:687
+#: stock/models.py:91 stock/models.py:686
msgid "Select Owner"
msgstr ""
-#: stock/models.py:421
+#: stock/models.py:420
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:453 stock/serializers.py:93
+#: stock/models.py:452 stock/serializers.py:93
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:470
+#: stock/models.py:469
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr ""
-#: stock/models.py:480 stock/models.py:489
+#: stock/models.py:479 stock/models.py:488
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:481
+#: stock/models.py:480
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:503
+#: stock/models.py:502
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:509
+#: stock/models.py:508
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:522
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:537
+#: stock/models.py:536
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:547
+#: stock/models.py:546
msgid "Base part"
msgstr ""
-#: stock/models.py:555
+#: stock/models.py:554
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:562 stock/templates/stock/location.html:17
+#: stock/models.py:561 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "Kho hàng"
-#: stock/models.py:565
+#: stock/models.py:564
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:572
+#: stock/models.py:571
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:578 stock/templates/stock/item_base.html:359
+#: stock/models.py:577 stock/templates/stock/item_base.html:359
msgid "Installed In"
msgstr ""
-#: stock/models.py:581
+#: stock/models.py:580
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:597
+#: stock/models.py:596
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:611
+#: stock/models.py:610
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:616
+#: stock/models.py:615
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:624
msgid "Source Build"
msgstr ""
-#: stock/models.py:627
+#: stock/models.py:626
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:638
+#: stock/models.py:637
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:640
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:647
+#: stock/models.py:646
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:653 stock/templates/stock/item_base.html:427
+#: stock/models.py:652 stock/templates/stock/item_base.html:427
#: templates/js/translated/stock.js:1881
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:654
+#: stock/models.py:653
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:674 stock/templates/stock/item.html:132
+#: stock/models.py:673 stock/templates/stock/item.html:132
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:682
+#: stock/models.py:681
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:709
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1189
+#: stock/models.py:1183
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1195
+#: stock/models.py:1189
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1201
+#: stock/models.py:1195
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1204
+#: stock/models.py:1198
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1207
+#: stock/models.py:1201
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1214
+#: stock/models.py:1208
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1284
+#: stock/models.py:1278
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1287
+#: stock/models.py:1281
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1290
+#: stock/models.py:1284
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1293
+#: stock/models.py:1287
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1296
+#: stock/models.py:1290
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1299
+#: stock/models.py:1293
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1306 stock/serializers.py:959
+#: stock/models.py:1300 stock/serializers.py:959
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1310
+#: stock/models.py:1304
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1314
+#: stock/models.py:1308
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1318
+#: stock/models.py:1312
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1487
+#: stock/models.py:1481
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:1948
+#: stock/models.py:1942
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2006
+#: stock/models.py:2000
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2012
+#: stock/models.py:2006
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2031
+#: stock/models.py:2025
msgid "Test name"
msgstr ""
-#: stock/models.py:2037
+#: stock/models.py:2031
msgid "Test result"
msgstr ""
-#: stock/models.py:2043
+#: stock/models.py:2037
msgid "Test output value"
msgstr ""
-#: stock/models.py:2050
+#: stock/models.py:2044
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2056
+#: stock/models.py:2050
msgid "Test notes"
msgstr ""
@@ -6599,7 +6618,7 @@ msgid "Available Quantity"
msgstr ""
#: stock/templates/stock/item_base.html:392
-#: templates/js/translated/build.js:1729
+#: templates/js/translated/build.js:1745
msgid "No location set"
msgstr ""
@@ -6613,7 +6632,7 @@ msgid "This StockItem expired on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:431
-#: templates/js/translated/table_filters.js:269
+#: templates/js/translated/table_filters.js:277
msgid "Expired"
msgstr ""
@@ -6623,7 +6642,7 @@ msgid "This StockItem expires on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:433
-#: templates/js/translated/table_filters.js:275
+#: templates/js/translated/table_filters.js:283
msgid "Stale"
msgstr ""
@@ -7433,64 +7452,64 @@ msgstr ""
msgid "Do you really want to remove the selected email address?"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:27
+#: templates/InvenTree/settings/user_display.html:28
msgid "Theme Settings"
msgstr "Thiết lập giao diện"
-#: templates/InvenTree/settings/user_display.html:37
+#: templates/InvenTree/settings/user_display.html:38
msgid "Select theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:48
+#: templates/InvenTree/settings/user_display.html:49
msgid "Set Theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:56
+#: templates/InvenTree/settings/user_display.html:57
msgid "Language Settings"
msgstr "Thiết lập ngôn ngữ"
-#: templates/InvenTree/settings/user_display.html:65
+#: templates/InvenTree/settings/user_display.html:66
msgid "Select language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:81
+#: templates/InvenTree/settings/user_display.html:82
#, python-format
msgid "%(lang_translated)s%% translated"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:83
+#: templates/InvenTree/settings/user_display.html:84
msgid "No translations available"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:90
+#: templates/InvenTree/settings/user_display.html:91
msgid "Set Language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:93
+#: templates/InvenTree/settings/user_display.html:94
msgid "Some languages are not complete"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:95
+#: templates/InvenTree/settings/user_display.html:96
msgid "Show only sufficent"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "and hidden."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "Show them too"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:104
+#: templates/InvenTree/settings/user_display.html:105
msgid "Help the translation efforts!"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:105
+#: templates/InvenTree/settings/user_display.html:106
msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:106
+#: templates/InvenTree/settings/user_display.html:107
msgid "InvenTree Translation Project"
msgstr ""
@@ -7787,7 +7806,7 @@ msgid "The following parts are low on required stock"
msgstr ""
#: templates/email/build_order_required_stock.html:18
-#: templates/js/translated/bom.js:1489
+#: templates/js/translated/bom.js:1506
msgid "Required Quantity"
msgstr ""
@@ -7801,7 +7820,7 @@ msgid "Click on the following link to view this part"
msgstr ""
#: templates/email/low_stock_notification.html:19
-#: templates/js/translated/part.js:2563
+#: templates/js/translated/part.js:2562
msgid "Minimum Quantity"
msgstr ""
@@ -7999,7 +8018,7 @@ msgstr ""
msgid "Row Data"
msgstr ""
-#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:620
+#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
#: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601
#: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003
#: templates/js/translated/order.js:1179 templates/modals.html:15
@@ -8069,117 +8088,118 @@ msgstr ""
msgid "Include part supplier data in exported BOM"
msgstr ""
-#: templates/js/translated/bom.js:511
+#: templates/js/translated/bom.js:512
msgid "Remove substitute part"
msgstr ""
-#: templates/js/translated/bom.js:565
+#: templates/js/translated/bom.js:566
msgid "Select and add a new substitute part using the input below"
msgstr ""
-#: templates/js/translated/bom.js:576
+#: templates/js/translated/bom.js:577
msgid "Are you sure you wish to remove this substitute part link?"
msgstr ""
-#: templates/js/translated/bom.js:582
+#: templates/js/translated/bom.js:583
msgid "Remove Substitute Part"
msgstr ""
-#: templates/js/translated/bom.js:621
+#: templates/js/translated/bom.js:622
msgid "Add Substitute"
msgstr ""
-#: templates/js/translated/bom.js:622
+#: templates/js/translated/bom.js:623
msgid "Edit BOM Item Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:684
+#: templates/js/translated/bom.js:685
msgid "All selected BOM items will be deleted"
msgstr ""
-#: templates/js/translated/bom.js:700
+#: templates/js/translated/bom.js:701
msgid "Delete selected BOM items?"
msgstr ""
-#: templates/js/translated/bom.js:819
+#: templates/js/translated/bom.js:835
msgid "Load BOM for subassembly"
msgstr ""
-#: templates/js/translated/bom.js:829
+#: templates/js/translated/bom.js:845
msgid "Substitutes Available"
msgstr ""
-#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1805
+#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821
msgid "Variant stock allowed"
msgstr ""
-#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1857
+#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872
#: templates/js/translated/order.js:3932
msgid "No Stock Available"
msgstr ""
-#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1861
+#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876
msgid "Includes variant and substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1863
-#: templates/js/translated/part.js:761 templates/js/translated/part.js:1538
+#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878
+#: templates/js/translated/part.js:761 templates/js/translated/part.js:1537
msgid "Includes variant stock"
msgstr ""
-#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1865
+#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880
msgid "Includes substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:962
+#: templates/js/translated/bom.js:985
msgid "Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:977
-msgid "Purchase Price Range"
-msgstr ""
-
-#: templates/js/translated/bom.js:984
-msgid "Purchase Price Average"
-msgstr ""
-
-#: templates/js/translated/bom.js:1033 templates/js/translated/bom.js:1153
+#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170
msgid "View BOM"
msgstr ""
-#: templates/js/translated/bom.js:1060
-msgid "Including On Order"
+#: templates/js/translated/bom.js:1046
+msgid "Purchase Price Range"
msgstr ""
-#: templates/js/translated/bom.js:1124
+#: templates/js/translated/bom.js:1053
+msgid "Purchase Price Average"
+msgstr ""
+
+#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863
+#: templates/js/translated/build.js:1947
+msgid "Consumable item"
+msgstr ""
+
+#: templates/js/translated/bom.js:1141
msgid "Validate BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1126
+#: templates/js/translated/bom.js:1143
msgid "This line has been validated"
msgstr ""
-#: templates/js/translated/bom.js:1128
+#: templates/js/translated/bom.js:1145
msgid "Edit substitute parts"
msgstr ""
-#: templates/js/translated/bom.js:1130 templates/js/translated/bom.js:1292
+#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1309
msgid "Edit BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1132
+#: templates/js/translated/bom.js:1149
msgid "Delete BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1650
+#: templates/js/translated/bom.js:1245 templates/js/translated/build.js:1666
msgid "No BOM items found"
msgstr ""
-#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1789
+#: templates/js/translated/bom.js:1489 templates/js/translated/build.js:1805
msgid "Required Part"
msgstr ""
-#: templates/js/translated/bom.js:1498
+#: templates/js/translated/bom.js:1515
msgid "Inherited from parent BOM"
msgstr ""
@@ -8207,256 +8227,260 @@ msgstr ""
msgid "There are incomplete outputs remaining for this build order"
msgstr ""
-#: templates/js/translated/build.js:217
+#: templates/js/translated/build.js:239
msgid "Build order is ready to be completed"
msgstr ""
-#: templates/js/translated/build.js:222
+#: templates/js/translated/build.js:247
+msgid "This build order cannot be completed as there are incomplete outputs"
+msgstr ""
+
+#: templates/js/translated/build.js:252
msgid "Build Order is incomplete"
msgstr ""
-#: templates/js/translated/build.js:254
+#: templates/js/translated/build.js:270
msgid "Complete Build Order"
msgstr ""
-#: templates/js/translated/build.js:295 templates/js/translated/stock.js:92
+#: templates/js/translated/build.js:311 templates/js/translated/stock.js:92
#: templates/js/translated/stock.js:214
msgid "Next available serial number"
msgstr ""
-#: templates/js/translated/build.js:297 templates/js/translated/stock.js:94
+#: templates/js/translated/build.js:313 templates/js/translated/stock.js:94
#: templates/js/translated/stock.js:216
msgid "Latest serial number"
msgstr "Số seri mới nhất"
-#: templates/js/translated/build.js:306
+#: templates/js/translated/build.js:322
msgid "The Bill of Materials contains trackable parts"
msgstr ""
-#: templates/js/translated/build.js:307
+#: templates/js/translated/build.js:323
msgid "Build outputs must be generated individually"
msgstr ""
-#: templates/js/translated/build.js:315
+#: templates/js/translated/build.js:331
msgid "Trackable parts can have serial numbers specified"
msgstr ""
-#: templates/js/translated/build.js:316
+#: templates/js/translated/build.js:332
msgid "Enter serial numbers to generate multiple single build outputs"
msgstr ""
-#: templates/js/translated/build.js:323
+#: templates/js/translated/build.js:339
msgid "Create Build Output"
msgstr ""
-#: templates/js/translated/build.js:354
+#: templates/js/translated/build.js:370
msgid "Allocate stock items to this build output"
msgstr ""
-#: templates/js/translated/build.js:365
+#: templates/js/translated/build.js:381
msgid "Unallocate stock from build output"
msgstr ""
-#: templates/js/translated/build.js:374
+#: templates/js/translated/build.js:390
msgid "Complete build output"
msgstr ""
-#: templates/js/translated/build.js:382
+#: templates/js/translated/build.js:398
msgid "Delete build output"
msgstr ""
-#: templates/js/translated/build.js:405
+#: templates/js/translated/build.js:421
msgid "Are you sure you wish to unallocate stock items from this build?"
msgstr ""
-#: templates/js/translated/build.js:423
+#: templates/js/translated/build.js:439
msgid "Unallocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:443 templates/js/translated/build.js:595
+#: templates/js/translated/build.js:459 templates/js/translated/build.js:611
msgid "Select Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:444 templates/js/translated/build.js:596
+#: templates/js/translated/build.js:460 templates/js/translated/build.js:612
msgid "At least one build output must be selected"
msgstr ""
-#: templates/js/translated/build.js:498 templates/js/translated/build.js:650
+#: templates/js/translated/build.js:514 templates/js/translated/build.js:666
msgid "Output"
msgstr ""
-#: templates/js/translated/build.js:516
+#: templates/js/translated/build.js:532
msgid "Complete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:663
+#: templates/js/translated/build.js:679
msgid "Delete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:753
+#: templates/js/translated/build.js:769
msgid "No build order allocations found"
msgstr ""
-#: templates/js/translated/build.js:790
+#: templates/js/translated/build.js:806
msgid "Location not specified"
msgstr ""
-#: templates/js/translated/build.js:1169
+#: templates/js/translated/build.js:1185
msgid "No active build outputs found"
msgstr ""
-#: templates/js/translated/build.js:1238
+#: templates/js/translated/build.js:1254
msgid "Allocated Stock"
msgstr ""
-#: templates/js/translated/build.js:1245
+#: templates/js/translated/build.js:1261
msgid "No tracked BOM items for this build"
msgstr ""
-#: templates/js/translated/build.js:1267
+#: templates/js/translated/build.js:1283
msgid "Completed Tests"
msgstr ""
-#: templates/js/translated/build.js:1272
+#: templates/js/translated/build.js:1288
msgid "No required tests for this build"
msgstr ""
-#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2697
+#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727
#: templates/js/translated/order.js:3632
msgid "Edit stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1748 templates/js/translated/build.js:2698
+#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728
#: templates/js/translated/order.js:3633
msgid "Delete stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1766
+#: templates/js/translated/build.js:1782
msgid "Edit Allocation"
msgstr ""
-#: templates/js/translated/build.js:1776
+#: templates/js/translated/build.js:1792
msgid "Remove Allocation"
msgstr ""
-#: templates/js/translated/build.js:1801
+#: templates/js/translated/build.js:1817
msgid "Substitute parts available"
msgstr ""
-#: templates/js/translated/build.js:1818
+#: templates/js/translated/build.js:1834
msgid "Quantity Per"
msgstr ""
-#: templates/js/translated/build.js:1847 templates/js/translated/order.js:3939
+#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939
msgid "Insufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1849 templates/js/translated/order.js:3937
+#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937
msgid "Sufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1882 templates/js/translated/build.js:2127
-#: templates/js/translated/build.js:2693 templates/js/translated/order.js:3951
+#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157
+#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1930 templates/js/translated/order.js:4031
+#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031
msgid "Build stock"
msgstr ""
-#: templates/js/translated/build.js:1934 templates/stock_table.html:50
+#: templates/js/translated/build.js:1959 templates/stock_table.html:50
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1937 templates/js/translated/order.js:4024
+#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024
msgid "Allocate stock"
msgstr ""
-#: templates/js/translated/build.js:1976 templates/js/translated/label.js:172
+#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172
#: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr ""
-#: templates/js/translated/build.js:1977 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2026 templates/js/translated/order.js:3108
+#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108
msgid "Specify stock allocation quantity"
msgstr ""
-#: templates/js/translated/build.js:2100
+#: templates/js/translated/build.js:2130
msgid "All Parts Allocated"
msgstr ""
-#: templates/js/translated/build.js:2101
+#: templates/js/translated/build.js:2131
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2115 templates/js/translated/order.js:3174
+#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
-#: templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2173
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2154 templates/js/translated/order.js:3271
+#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2226 templates/js/translated/order.js:3348
+#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348
msgid "No matching stock items"
msgstr ""
-#: templates/js/translated/build.js:2323
+#: templates/js/translated/build.js:2353
msgid "Automatic Stock Allocation"
msgstr ""
-#: templates/js/translated/build.js:2324
+#: templates/js/translated/build.js:2354
msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines"
msgstr ""
-#: templates/js/translated/build.js:2326
+#: templates/js/translated/build.js:2356
msgid "If a location is specifed, stock will only be allocated from that location"
msgstr ""
-#: templates/js/translated/build.js:2327
+#: templates/js/translated/build.js:2357
msgid "If stock is considered interchangeable, it will be allocated from the first location it is found"
msgstr ""
-#: templates/js/translated/build.js:2328
+#: templates/js/translated/build.js:2358
msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found"
msgstr ""
-#: templates/js/translated/build.js:2349
+#: templates/js/translated/build.js:2379
msgid "Allocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:2455
+#: templates/js/translated/build.js:2485
msgid "No builds matching query"
msgstr ""
-#: templates/js/translated/build.js:2490 templates/js/translated/part.js:1422
-#: templates/js/translated/part.js:1954 templates/js/translated/stock.js:1686
+#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421
+#: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686
#: templates/js/translated/stock.js:2384
msgid "Select"
msgstr ""
-#: templates/js/translated/build.js:2504
+#: templates/js/translated/build.js:2534
msgid "Build order is overdue"
msgstr ""
-#: templates/js/translated/build.js:2532
+#: templates/js/translated/build.js:2562
msgid "Progress"
msgstr ""
-#: templates/js/translated/build.js:2568 templates/js/translated/stock.js:2651
+#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2651
msgid "No user information"
msgstr ""
-#: templates/js/translated/build.js:2674
+#: templates/js/translated/build.js:2704
msgid "No parts allocated for"
msgstr ""
@@ -8644,23 +8668,23 @@ msgstr ""
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1922 templates/search.html:29
+#: templates/js/translated/forms.js:1923 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2175
+#: templates/js/translated/forms.js:2176
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2653
+#: templates/js/translated/forms.js:2654
msgid "Select Columns"
msgstr ""
@@ -8672,7 +8696,7 @@ msgstr ""
msgid "NO"
msgstr ""
-#: templates/js/translated/helpers.js:362
+#: templates/js/translated/helpers.js:363
msgid "Notes updated"
msgstr ""
@@ -9091,7 +9115,7 @@ msgstr ""
#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2503
#: templates/js/translated/order.js:3842 templates/js/translated/order.js:4350
-#: templates/js/translated/part.js:2196 templates/js/translated/part.js:2794
+#: templates/js/translated/part.js:2195 templates/js/translated/part.js:2793
msgid "Unit Price"
msgstr ""
@@ -9446,8 +9470,8 @@ msgstr ""
msgid "Copy Bill of Materials"
msgstr ""
-#: templates/js/translated/part.js:584 templates/js/translated/part.js:1520
-#: templates/js/translated/table_filters.js:468
+#: templates/js/translated/part.js:584 templates/js/translated/part.js:1519
+#: templates/js/translated/table_filters.js:476
msgid "Low stock"
msgstr ""
@@ -9483,140 +9507,140 @@ msgstr ""
msgid "Delete Part Relationship"
msgstr ""
-#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1608
+#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1607
msgid "No parts found"
msgstr ""
-#: templates/js/translated/part.js:1487
+#: templates/js/translated/part.js:1486
msgid "No category"
msgstr ""
-#: templates/js/translated/part.js:1518
+#: templates/js/translated/part.js:1517
msgid "No stock"
msgstr ""
-#: templates/js/translated/part.js:1542
+#: templates/js/translated/part.js:1541
msgid "Allocated to build orders"
msgstr ""
-#: templates/js/translated/part.js:1546
+#: templates/js/translated/part.js:1545
msgid "Allocated to sales orders"
msgstr ""
-#: templates/js/translated/part.js:1632 templates/js/translated/part.js:1875
+#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1874
#: templates/js/translated/stock.js:2345
msgid "Display as list"
msgstr ""
-#: templates/js/translated/part.js:1648
+#: templates/js/translated/part.js:1647
msgid "Display as grid"
msgstr ""
-#: templates/js/translated/part.js:1714
+#: templates/js/translated/part.js:1713
msgid "Set the part category for the selected parts"
msgstr ""
-#: templates/js/translated/part.js:1719
+#: templates/js/translated/part.js:1718
msgid "Set Part Category"
msgstr ""
-#: templates/js/translated/part.js:1724
+#: templates/js/translated/part.js:1723
msgid "Select Part Category"
msgstr ""
-#: templates/js/translated/part.js:1737
+#: templates/js/translated/part.js:1736
msgid "Category is required"
msgstr ""
-#: templates/js/translated/part.js:1894 templates/js/translated/stock.js:2364
+#: templates/js/translated/part.js:1893 templates/js/translated/stock.js:2364
msgid "Display as tree"
msgstr ""
-#: templates/js/translated/part.js:1973
+#: templates/js/translated/part.js:1972
msgid "Load Subcategories"
msgstr ""
-#: templates/js/translated/part.js:1989
+#: templates/js/translated/part.js:1988
msgid "Subscribed category"
msgstr ""
-#: templates/js/translated/part.js:2053
+#: templates/js/translated/part.js:2052
msgid "No test templates matching query"
msgstr ""
-#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1299
+#: templates/js/translated/part.js:2103 templates/js/translated/stock.js:1299
msgid "Edit test result"
msgstr ""
-#: templates/js/translated/part.js:2105 templates/js/translated/stock.js:1300
+#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1300
#: templates/js/translated/stock.js:1560
msgid "Delete test result"
msgstr ""
-#: templates/js/translated/part.js:2111
+#: templates/js/translated/part.js:2110
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/translated/part.js:2133
+#: templates/js/translated/part.js:2132
msgid "Edit Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2147
+#: templates/js/translated/part.js:2146
msgid "Delete Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2172
+#: templates/js/translated/part.js:2171
#, python-brace-format
msgid "No ${human_name} information found"
msgstr ""
-#: templates/js/translated/part.js:2229
+#: templates/js/translated/part.js:2228
#, python-brace-format
msgid "Edit ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2230
+#: templates/js/translated/part.js:2229
#, python-brace-format
msgid "Delete ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2395 templates/js/translated/part.js:2396
+#: templates/js/translated/part.js:2394 templates/js/translated/part.js:2395
msgid "No date specified"
msgstr ""
-#: templates/js/translated/part.js:2398
+#: templates/js/translated/part.js:2397
msgid "Specified date is in the past"
msgstr ""
-#: templates/js/translated/part.js:2404
+#: templates/js/translated/part.js:2403
msgid "Speculative"
msgstr ""
-#: templates/js/translated/part.js:2454
+#: templates/js/translated/part.js:2453
msgid "No scheduling information available for this part"
msgstr ""
-#: templates/js/translated/part.js:2460
+#: templates/js/translated/part.js:2459
msgid "Error fetching scheduling information for this part"
msgstr ""
-#: templates/js/translated/part.js:2556
+#: templates/js/translated/part.js:2555
msgid "Scheduled Stock Quantities"
msgstr ""
-#: templates/js/translated/part.js:2572
+#: templates/js/translated/part.js:2571
msgid "Maximum Quantity"
msgstr ""
-#: templates/js/translated/part.js:2617
+#: templates/js/translated/part.js:2616
msgid "Minimum Stock Level"
msgstr ""
-#: templates/js/translated/part.js:2718
+#: templates/js/translated/part.js:2717
msgid "Single Price"
msgstr ""
-#: templates/js/translated/part.js:2737
+#: templates/js/translated/part.js:2736
msgid "Single Price Difference"
msgstr ""
@@ -9979,7 +10003,7 @@ msgid "Stock item is destroyed"
msgstr ""
#: templates/js/translated/stock.js:1816
-#: templates/js/translated/table_filters.js:196
+#: templates/js/translated/table_filters.js:204
msgid "Depleted"
msgstr ""
@@ -10103,215 +10127,215 @@ msgstr ""
msgid "Allow Variant Stock"
msgstr ""
-#: templates/js/translated/table_filters.js:118
-#: templates/js/translated/table_filters.js:191
+#: templates/js/translated/table_filters.js:126
+#: templates/js/translated/table_filters.js:199
msgid "Include sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:119
+#: templates/js/translated/table_filters.js:127
msgid "Include locations"
msgstr ""
-#: templates/js/translated/table_filters.js:129
-#: templates/js/translated/table_filters.js:130
-#: templates/js/translated/table_filters.js:437
+#: templates/js/translated/table_filters.js:137
+#: templates/js/translated/table_filters.js:138
+#: templates/js/translated/table_filters.js:445
msgid "Include subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:134
-#: templates/js/translated/table_filters.js:480
+#: templates/js/translated/table_filters.js:142
+#: templates/js/translated/table_filters.js:488
msgid "Subscribed"
msgstr ""
-#: templates/js/translated/table_filters.js:144
-#: templates/js/translated/table_filters.js:226
+#: templates/js/translated/table_filters.js:152
+#: templates/js/translated/table_filters.js:234
msgid "Is Serialized"
msgstr ""
-#: templates/js/translated/table_filters.js:147
-#: templates/js/translated/table_filters.js:233
+#: templates/js/translated/table_filters.js:155
+#: templates/js/translated/table_filters.js:241
msgid "Serial number GTE"
msgstr ""
-#: templates/js/translated/table_filters.js:148
-#: templates/js/translated/table_filters.js:234
+#: templates/js/translated/table_filters.js:156
+#: templates/js/translated/table_filters.js:242
msgid "Serial number greater than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:151
-#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:159
+#: templates/js/translated/table_filters.js:245
msgid "Serial number LTE"
msgstr ""
-#: templates/js/translated/table_filters.js:152
-#: templates/js/translated/table_filters.js:238
+#: templates/js/translated/table_filters.js:160
+#: templates/js/translated/table_filters.js:246
msgid "Serial number less than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:155
-#: templates/js/translated/table_filters.js:156
-#: templates/js/translated/table_filters.js:229
-#: templates/js/translated/table_filters.js:230
+#: templates/js/translated/table_filters.js:163
+#: templates/js/translated/table_filters.js:164
+#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:238
msgid "Serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:160
-#: templates/js/translated/table_filters.js:251
+#: templates/js/translated/table_filters.js:168
+#: templates/js/translated/table_filters.js:259
msgid "Batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:171
-#: templates/js/translated/table_filters.js:409
+#: templates/js/translated/table_filters.js:179
+#: templates/js/translated/table_filters.js:417
msgid "Active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:172
+#: templates/js/translated/table_filters.js:180
msgid "Show stock for active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:177
+#: templates/js/translated/table_filters.js:185
msgid "Part is an assembly"
msgstr ""
-#: templates/js/translated/table_filters.js:181
+#: templates/js/translated/table_filters.js:189
msgid "Is allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:182
+#: templates/js/translated/table_filters.js:190
msgid "Item has been allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:187
+#: templates/js/translated/table_filters.js:195
msgid "Stock is available for use"
msgstr ""
-#: templates/js/translated/table_filters.js:192
+#: templates/js/translated/table_filters.js:200
msgid "Include stock in sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:197
+#: templates/js/translated/table_filters.js:205
msgid "Show stock items which are depleted"
msgstr ""
-#: templates/js/translated/table_filters.js:202
+#: templates/js/translated/table_filters.js:210
msgid "Show items which are in stock"
msgstr ""
-#: templates/js/translated/table_filters.js:206
+#: templates/js/translated/table_filters.js:214
msgid "In Production"
msgstr ""
-#: templates/js/translated/table_filters.js:207
+#: templates/js/translated/table_filters.js:215
msgid "Show items which are in production"
msgstr ""
-#: templates/js/translated/table_filters.js:211
+#: templates/js/translated/table_filters.js:219
msgid "Include Variants"
msgstr ""
-#: templates/js/translated/table_filters.js:212
+#: templates/js/translated/table_filters.js:220
msgid "Include stock items for variant parts"
msgstr ""
-#: templates/js/translated/table_filters.js:216
+#: templates/js/translated/table_filters.js:224
msgid "Installed"
msgstr ""
-#: templates/js/translated/table_filters.js:217
+#: templates/js/translated/table_filters.js:225
msgid "Show stock items which are installed in another item"
msgstr ""
-#: templates/js/translated/table_filters.js:222
+#: templates/js/translated/table_filters.js:230
msgid "Show items which have been assigned to a customer"
msgstr ""
-#: templates/js/translated/table_filters.js:242
-#: templates/js/translated/table_filters.js:243
+#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:251
msgid "Stock status"
msgstr ""
-#: templates/js/translated/table_filters.js:246
+#: templates/js/translated/table_filters.js:254
msgid "Has batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:254
+#: templates/js/translated/table_filters.js:262
msgid "Tracked"
msgstr ""
-#: templates/js/translated/table_filters.js:255
+#: templates/js/translated/table_filters.js:263
msgid "Stock item is tracked by either batch code or serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:260
+#: templates/js/translated/table_filters.js:268
msgid "Has purchase price"
msgstr ""
-#: templates/js/translated/table_filters.js:261
+#: templates/js/translated/table_filters.js:269
msgid "Show stock items which have a purchase price set"
msgstr ""
-#: templates/js/translated/table_filters.js:270
+#: templates/js/translated/table_filters.js:278
msgid "Show stock items which have expired"
msgstr ""
-#: templates/js/translated/table_filters.js:276
+#: templates/js/translated/table_filters.js:284
msgid "Show stock which is close to expiring"
msgstr ""
-#: templates/js/translated/table_filters.js:288
+#: templates/js/translated/table_filters.js:296
msgid "Test Passed"
msgstr ""
-#: templates/js/translated/table_filters.js:292
+#: templates/js/translated/table_filters.js:300
msgid "Include Installed Items"
msgstr ""
-#: templates/js/translated/table_filters.js:311
+#: templates/js/translated/table_filters.js:319
msgid "Build status"
msgstr ""
-#: templates/js/translated/table_filters.js:324
-#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:332
+#: templates/js/translated/table_filters.js:373
msgid "Assigned to me"
msgstr ""
-#: templates/js/translated/table_filters.js:341
-#: templates/js/translated/table_filters.js:352
-#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:349
+#: templates/js/translated/table_filters.js:360
+#: templates/js/translated/table_filters.js:390
msgid "Order status"
msgstr ""
-#: templates/js/translated/table_filters.js:357
-#: templates/js/translated/table_filters.js:374
-#: templates/js/translated/table_filters.js:387
+#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:395
msgid "Outstanding"
msgstr ""
-#: templates/js/translated/table_filters.js:438
+#: templates/js/translated/table_filters.js:446
msgid "Include parts in subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:443
+#: templates/js/translated/table_filters.js:451
msgid "Show active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:451
+#: templates/js/translated/table_filters.js:459
msgid "Available stock"
msgstr ""
-#: templates/js/translated/table_filters.js:459
+#: templates/js/translated/table_filters.js:467
msgid "Has IPN"
msgstr ""
-#: templates/js/translated/table_filters.js:460
+#: templates/js/translated/table_filters.js:468
msgid "Part has internal part number"
msgstr ""
-#: templates/js/translated/table_filters.js:464
+#: templates/js/translated/table_filters.js:472
msgid "In stock"
msgstr ""
-#: templates/js/translated/table_filters.js:472
+#: templates/js/translated/table_filters.js:480
msgid "Purchasable"
msgstr ""
diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po
index 9e344f4a74..d480c1127f 100644
--- a/InvenTree/locale/zh/LC_MESSAGES/django.po
+++ b/InvenTree/locale/zh/LC_MESSAGES/django.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inventree\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-20 09:03+0000\n"
-"PO-Revision-Date: 2022-09-21 00:45\n"
+"POT-Creation-Date: 2022-09-24 13:47+0000\n"
+"PO-Revision-Date: 2022-09-25 01:07\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
@@ -36,11 +36,11 @@ msgstr "输入日期"
#: order/templates/order/so_sidebar.html:17
#: part/templates/part/part_sidebar.html:59
#: report/templates/report/inventree_build_order_base.html:172
-#: stock/models.py:1947 stock/models.py:2055 stock/serializers.py:327
+#: stock/models.py:1941 stock/models.py:2049 stock/serializers.py:327
#: stock/serializers.py:456 stock/serializers.py:537 stock/serializers.py:823
#: stock/serializers.py:922 stock/serializers.py:1054
#: stock/templates/stock/stock_sidebar.html:25
-#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1107
+#: templates/js/translated/barcode.js:100 templates/js/translated/bom.js:1121
#: templates/js/translated/company.js:1022
#: templates/js/translated/order.js:2404 templates/js/translated/order.js:2555
#: templates/js/translated/order.js:3053 templates/js/translated/order.js:4004
@@ -168,117 +168,117 @@ msgstr "唯一序列号 ({s}) 必须匹配数量 ({q})"
msgid "Remove HTML tags from this value"
msgstr ""
-#: InvenTree/models.py:236
+#: InvenTree/models.py:238
msgid "Improperly formatted pattern"
msgstr ""
-#: InvenTree/models.py:243
+#: InvenTree/models.py:245
msgid "Unknown format key specified"
msgstr ""
-#: InvenTree/models.py:249
+#: InvenTree/models.py:251
msgid "Missing required format key"
msgstr ""
-#: InvenTree/models.py:261
+#: InvenTree/models.py:263
msgid "Reference field cannot be empty"
msgstr ""
-#: InvenTree/models.py:268
+#: InvenTree/models.py:270
msgid "Reference must match required pattern"
msgstr ""
-#: InvenTree/models.py:304
+#: InvenTree/models.py:306
msgid "Reference number is too large"
msgstr ""
-#: InvenTree/models.py:382
+#: InvenTree/models.py:384
msgid "Missing file"
msgstr "缺少文件"
-#: InvenTree/models.py:383
+#: InvenTree/models.py:385
msgid "Missing external link"
msgstr "缺少外部链接"
-#: InvenTree/models.py:395 stock/models.py:2049
+#: InvenTree/models.py:405 stock/models.py:2043
#: templates/js/translated/attachment.js:103
#: templates/js/translated/attachment.js:241
msgid "Attachment"
msgstr "附件"
-#: InvenTree/models.py:396
+#: InvenTree/models.py:406
msgid "Select file to attach"
msgstr "选择附件"
-#: InvenTree/models.py:402 company/models.py:124 company/models.py:276
+#: InvenTree/models.py:412 company/models.py:124 company/models.py:276
#: company/models.py:511 order/models.py:84 order/models.py:1249
#: part/models.py:802 part/templates/part/part_scheduling.html:11
#: report/templates/report/inventree_build_order_base.html:164
#: templates/js/translated/company.js:691
#: templates/js/translated/company.js:1011
-#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1568
+#: templates/js/translated/order.js:3042 templates/js/translated/part.js:1567
msgid "Link"
msgstr "链接"
-#: InvenTree/models.py:403 build/models.py:285 part/models.py:803
-#: stock/models.py:605
+#: InvenTree/models.py:413 build/models.py:285 part/models.py:803
+#: stock/models.py:604
msgid "Link to external URL"
msgstr "链接到外部 URL"
-#: InvenTree/models.py:406 templates/js/translated/attachment.js:104
+#: InvenTree/models.py:416 templates/js/translated/attachment.js:104
#: templates/js/translated/attachment.js:285
msgid "Comment"
msgstr "注释"
-#: InvenTree/models.py:406
+#: InvenTree/models.py:416
msgid "File comment"
msgstr "文件注释"
-#: InvenTree/models.py:412 InvenTree/models.py:413 common/models.py:1669
-#: common/models.py:1670 common/models.py:1893 common/models.py:1894
-#: common/models.py:2156 common/models.py:2157 part/models.py:2235
-#: part/models.py:2255 plugin/models.py:260 plugin/models.py:261
+#: InvenTree/models.py:422 InvenTree/models.py:423 common/models.py:1679
+#: common/models.py:1680 common/models.py:1903 common/models.py:1904
+#: common/models.py:2166 common/models.py:2167 part/models.py:2240
+#: part/models.py:2260 plugin/models.py:260 plugin/models.py:261
#: report/templates/report/inventree_test_report_base.html:96
#: templates/js/translated/stock.js:2645
msgid "User"
msgstr "用户"
-#: InvenTree/models.py:416
+#: InvenTree/models.py:426
msgid "upload date"
msgstr "上传日期"
-#: InvenTree/models.py:438
+#: InvenTree/models.py:448
msgid "Filename must not be empty"
msgstr "文件名不能为空!"
-#: InvenTree/models.py:447
+#: InvenTree/models.py:457
msgid "Invalid attachment directory"
msgstr "非法的附件目录"
-#: InvenTree/models.py:457
+#: InvenTree/models.py:467
#, python-brace-format
msgid "Filename contains illegal character '{c}'"
msgstr "文件名包含非法字符 '{c}'"
-#: InvenTree/models.py:460
+#: InvenTree/models.py:470
msgid "Filename missing extension"
msgstr "缺少文件名扩展"
-#: InvenTree/models.py:467
+#: InvenTree/models.py:477
msgid "Attachment with this filename already exists"
msgstr "使用此文件名的附件已存在"
-#: InvenTree/models.py:474
+#: InvenTree/models.py:484
msgid "Error renaming file"
msgstr "重命名文件出错"
-#: InvenTree/models.py:510
+#: InvenTree/models.py:520
msgid "Invalid choice"
msgstr "选择无效"
-#: InvenTree/models.py:547 InvenTree/models.py:548 common/models.py:1879
+#: InvenTree/models.py:557 InvenTree/models.py:558 common/models.py:1889
#: company/models.py:358 label/models.py:101 part/models.py:746
-#: part/models.py:2413 plugin/models.py:94 report/models.py:152
+#: part/models.py:2418 plugin/models.py:94 report/models.py:152
#: templates/InvenTree/settings/mixins/urls.html:13
#: templates/InvenTree/settings/plugin.html:51
#: templates/InvenTree/settings/plugin.html:134
@@ -288,16 +288,16 @@ msgstr "选择无效"
#: templates/js/translated/company.js:793
#: templates/js/translated/notification.js:71
#: templates/js/translated/part.js:686 templates/js/translated/part.js:838
-#: templates/js/translated/part.js:1961 templates/js/translated/stock.js:2390
+#: templates/js/translated/part.js:1960 templates/js/translated/stock.js:2390
msgid "Name"
msgstr "名称"
-#: InvenTree/models.py:554 build/models.py:163
+#: InvenTree/models.py:564 build/models.py:163
#: build/templates/build/detail.html:24 company/models.py:282
#: company/models.py:517 company/templates/company/company_base.html:71
#: company/templates/company/manufacturer_part.html:75
#: company/templates/company/supplier_part.html:108 label/models.py:108
-#: order/models.py:82 part/models.py:769 part/models.py:2425
+#: order/models.py:82 part/models.py:769 part/models.py:2430
#: part/templates/part/category.html:80 part/templates/part/part_base.html:172
#: part/templates/part/part_scheduling.html:12 report/models.py:165
#: report/models.py:507 report/models.py:551
@@ -305,60 +305,60 @@ msgstr "名称"
#: stock/templates/stock/location.html:113
#: templates/InvenTree/settings/plugin_settings.html:33
#: templates/InvenTree/settings/settings.html:358
-#: templates/js/translated/bom.js:553 templates/js/translated/bom.js:846
-#: templates/js/translated/build.js:2512 templates/js/translated/company.js:444
+#: templates/js/translated/bom.js:554 templates/js/translated/bom.js:862
+#: templates/js/translated/build.js:2542 templates/js/translated/company.js:444
#: templates/js/translated/company.js:702
#: templates/js/translated/company.js:986 templates/js/translated/order.js:1988
#: templates/js/translated/order.js:2220 templates/js/translated/order.js:2831
#: templates/js/translated/part.js:745 templates/js/translated/part.js:1187
-#: templates/js/translated/part.js:1463 templates/js/translated/part.js:1997
-#: templates/js/translated/part.js:2072 templates/js/translated/stock.js:1744
+#: templates/js/translated/part.js:1462 templates/js/translated/part.js:1996
+#: templates/js/translated/part.js:2071 templates/js/translated/stock.js:1744
#: templates/js/translated/stock.js:2422 templates/js/translated/stock.js:2482
msgid "Description"
msgstr "描述信息"
-#: InvenTree/models.py:555
+#: InvenTree/models.py:565
msgid "Description (optional)"
msgstr "描述 (可选)"
-#: InvenTree/models.py:563
+#: InvenTree/models.py:573
msgid "parent"
msgstr "上级项"
-#: InvenTree/models.py:570 InvenTree/models.py:571
-#: templates/js/translated/part.js:2006 templates/js/translated/stock.js:2431
+#: InvenTree/models.py:580 InvenTree/models.py:581
+#: templates/js/translated/part.js:2005 templates/js/translated/stock.js:2431
msgid "Path"
msgstr ""
-#: InvenTree/models.py:672
+#: InvenTree/models.py:682
msgid "Barcode Data"
msgstr ""
-#: InvenTree/models.py:673
+#: InvenTree/models.py:683
msgid "Third party barcode data"
msgstr ""
-#: InvenTree/models.py:678 order/serializers.py:486
+#: InvenTree/models.py:688 order/serializers.py:486
msgid "Barcode Hash"
msgstr ""
-#: InvenTree/models.py:679
+#: InvenTree/models.py:689
msgid "Unique hash of barcode data"
msgstr ""
-#: InvenTree/models.py:724
+#: InvenTree/models.py:734
msgid "Existing barcode found"
msgstr ""
-#: InvenTree/models.py:777
+#: InvenTree/models.py:787
msgid "Server Error"
msgstr "服务器错误"
-#: InvenTree/models.py:778
+#: InvenTree/models.py:788
msgid "An error has been logged by the server."
msgstr "服务器记录了一个错误。"
-#: InvenTree/serializers.py:55 part/models.py:2741
+#: InvenTree/serializers.py:55 part/models.py:2766
msgid "Must be a valid number"
msgstr "必须是有效数字"
@@ -538,7 +538,7 @@ msgid "InvenTree system health checks failed"
msgstr "InventTree系统健康检查失败"
#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:140
-#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:334
+#: InvenTree/status_codes.py:306 templates/js/translated/table_filters.js:342
msgid "Pending"
msgstr "待定"
@@ -660,7 +660,7 @@ msgstr "合并的库存项目"
msgid "Converted to variant"
msgstr "转换为变量"
-#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:221
+#: InvenTree/status_codes.py:285 templates/js/translated/table_filters.js:229
msgid "Sent to customer"
msgstr "发送给客户"
@@ -755,7 +755,7 @@ msgstr "上级生产选项无效"
#: report/templates/report/inventree_build_order_base.html:105
#: templates/email/build_order_completed.html:16
#: templates/email/overdue_build_order.html:15
-#: templates/js/translated/build.js:764
+#: templates/js/translated/build.js:780
msgid "Build Order"
msgstr "生产订单"
@@ -774,12 +774,12 @@ msgid "Build Order Reference"
msgstr "相关生产订单"
#: build/models.py:155 order/models.py:240 order/models.py:627
-#: order/models.py:908 part/models.py:2659
+#: order/models.py:908 part/models.py:2676
#: part/templates/part/upload_bom.html:54
#: report/templates/report/inventree_po_report.html:91
#: report/templates/report/inventree_so_report.html:92
-#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:853
-#: templates/js/translated/build.js:1813 templates/js/translated/order.js:2251
+#: templates/js/translated/bom.js:691 templates/js/translated/bom.js:872
+#: templates/js/translated/build.js:1829 templates/js/translated/order.js:2251
#: templates/js/translated/order.js:2484 templates/js/translated/order.js:3823
#: templates/js/translated/order.js:4331
msgid "Reference"
@@ -801,10 +801,10 @@ msgstr "此次生产匹配的订单"
#: build/models.py:180 build/templates/build/build_base.html:80
#: build/templates/build/detail.html:29 company/models.py:679
#: order/models.py:1005 order/models.py:1116 order/models.py:1117
-#: part/models.py:343 part/models.py:2181 part/models.py:2196
-#: part/models.py:2215 part/models.py:2233 part/models.py:2332
-#: part/models.py:2459 part/models.py:2549 part/models.py:2634
-#: part/models.py:2910 part/serializers.py:814
+#: part/models.py:343 part/models.py:2186 part/models.py:2201
+#: part/models.py:2220 part/models.py:2238 part/models.py:2337
+#: part/models.py:2464 part/models.py:2556 part/models.py:2641
+#: part/models.py:2935 part/serializers.py:828
#: part/templates/part/part_app_base.html:8
#: part/templates/part/part_pricing.html:12
#: part/templates/part/upload_bom.html:52
@@ -816,10 +816,10 @@ msgstr "此次生产匹配的订单"
#: templates/email/build_order_required_stock.html:17
#: templates/email/low_stock_notification.html:16
#: templates/email/overdue_build_order.html:16
-#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:552
-#: templates/js/translated/bom.js:689 templates/js/translated/bom.js:800
-#: templates/js/translated/build.js:1189 templates/js/translated/build.js:1682
-#: templates/js/translated/build.js:2126 templates/js/translated/build.js:2517
+#: templates/js/translated/barcode.js:430 templates/js/translated/bom.js:553
+#: templates/js/translated/bom.js:690 templates/js/translated/bom.js:816
+#: templates/js/translated/build.js:1205 templates/js/translated/build.js:1698
+#: templates/js/translated/build.js:2156 templates/js/translated/build.js:2547
#: templates/js/translated/company.js:301
#: templates/js/translated/company.js:531
#: templates/js/translated/company.js:643
@@ -828,7 +828,7 @@ msgstr "此次生产匹配的订单"
#: templates/js/translated/order.js:2205 templates/js/translated/order.js:3185
#: templates/js/translated/order.js:3581 templates/js/translated/order.js:3807
#: templates/js/translated/part.js:1172 templates/js/translated/part.js:1244
-#: templates/js/translated/part.js:1441 templates/js/translated/stock.js:586
+#: templates/js/translated/part.js:1440 templates/js/translated/stock.js:586
#: templates/js/translated/stock.js:751 templates/js/translated/stock.js:958
#: templates/js/translated/stock.js:1700 templates/js/translated/stock.js:2508
#: templates/js/translated/stock.js:2703 templates/js/translated/stock.js:2837
@@ -847,8 +847,8 @@ msgstr "相关销售订单"
msgid "SalesOrder to which this build is allocated"
msgstr "此次生产匹配的销售订单"
-#: build/models.py:202 build/serializers.py:800
-#: templates/js/translated/build.js:2114 templates/js/translated/order.js:3173
+#: build/models.py:202 build/serializers.py:819
+#: templates/js/translated/build.js:2144 templates/js/translated/order.js:3173
msgid "Source Location"
msgstr "来源地点"
@@ -889,7 +889,7 @@ msgid "Build status code"
msgstr "生产状态代码"
#: build/models.py:240 build/serializers.py:225 order/serializers.py:464
-#: stock/models.py:609 templates/js/translated/order.js:1496
+#: stock/models.py:608 templates/js/translated/order.js:1496
msgid "Batch Code"
msgstr "批量代码"
@@ -911,7 +911,7 @@ msgid "Target date for build completion. Build will be overdue after this date."
msgstr "生产完成的目标日期。生产将在此日期之后逾期。"
#: build/models.py:255 order/models.py:286
-#: templates/js/translated/build.js:2594
+#: templates/js/translated/build.js:2624
msgid "Completion Date"
msgstr "完成日期:"
@@ -919,7 +919,7 @@ msgstr "完成日期:"
msgid "completed by"
msgstr "完成人"
-#: build/models.py:269 templates/js/translated/build.js:2562
+#: build/models.py:269 templates/js/translated/build.js:2592
msgid "Issued by"
msgstr "发布者"
@@ -932,7 +932,7 @@ msgstr "发布此生产订单的用户"
#: order/templates/order/order_base.html:185
#: order/templates/order/sales_order_base.html:183 part/models.py:942
#: report/templates/report/inventree_build_order_base.html:158
-#: templates/js/translated/build.js:2574 templates/js/translated/order.js:2022
+#: templates/js/translated/build.js:2604 templates/js/translated/order.js:2022
msgid "Responsible"
msgstr "责任人"
@@ -943,7 +943,7 @@ msgstr "负责此生产订单的用户"
#: build/models.py:284 build/templates/build/detail.html:101
#: company/templates/company/manufacturer_part.html:107
#: company/templates/company/supplier_part.html:188
-#: part/templates/part/part_base.html:359 stock/models.py:603
+#: part/templates/part/part_base.html:359 stock/models.py:602
#: stock/templates/stock/item_base.html:203
msgid "External Link"
msgstr "外部链接"
@@ -973,48 +973,48 @@ msgstr "生产产出已完成"
msgid "Build output does not match Build Order"
msgstr "生产产出与订单不匹配"
-#: build/models.py:1158
+#: build/models.py:1167
msgid "Build item must specify a build output, as master part is marked as trackable"
msgstr "生产项必须指定生产产出,因为主部件已经被标记为可追踪的"
-#: build/models.py:1167
+#: build/models.py:1176
#, python-brace-format
msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})"
msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})"
-#: build/models.py:1177 order/models.py:1383
+#: build/models.py:1186 order/models.py:1383
msgid "Stock item is over-allocated"
msgstr "库存物品分配过度!"
-#: build/models.py:1183 order/models.py:1386
+#: build/models.py:1192 order/models.py:1386
msgid "Allocation quantity must be greater than zero"
msgstr "分配数量必须大于0"
-#: build/models.py:1189
+#: build/models.py:1198
msgid "Quantity must be 1 for serialized stock"
msgstr "序列化库存的数量必须是 1"
-#: build/models.py:1246
+#: build/models.py:1255
msgid "Selected stock item not found in BOM"
msgstr "在BOM中找不到选定的库存项"
-#: build/models.py:1315 stock/templates/stock/item_base.html:175
-#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2496
+#: build/models.py:1324 stock/templates/stock/item_base.html:175
+#: templates/InvenTree/search.html:139 templates/js/translated/build.js:2526
#: templates/navbar.html:38
msgid "Build"
msgstr "生产"
-#: build/models.py:1316
+#: build/models.py:1325
msgid "Build to allocate parts"
msgstr "生产以分配部件"
-#: build/models.py:1332 build/serializers.py:645 order/serializers.py:1035
+#: build/models.py:1341 build/serializers.py:660 order/serializers.py:1035
#: order/serializers.py:1056 stock/serializers.py:394 stock/serializers.py:754
#: stock/serializers.py:880 stock/templates/stock/item_base.html:10
#: stock/templates/stock/item_base.html:23
#: stock/templates/stock/item_base.html:197
-#: templates/js/translated/build.js:774 templates/js/translated/build.js:779
-#: templates/js/translated/build.js:2128 templates/js/translated/build.js:2679
+#: templates/js/translated/build.js:790 templates/js/translated/build.js:795
+#: templates/js/translated/build.js:2158 templates/js/translated/build.js:2709
#: templates/js/translated/order.js:107 templates/js/translated/order.js:3186
#: templates/js/translated/order.js:3488 templates/js/translated/order.js:3493
#: templates/js/translated/order.js:3588 templates/js/translated/order.js:3680
@@ -1023,18 +1023,18 @@ msgstr "生产以分配部件"
msgid "Stock Item"
msgstr "库存项"
-#: build/models.py:1333
+#: build/models.py:1342
msgid "Source stock item"
msgstr "源库存项"
-#: build/models.py:1345 build/serializers.py:193
+#: build/models.py:1354 build/serializers.py:193
#: build/templates/build/build_base.html:85
-#: build/templates/build/detail.html:34 common/models.py:1701
+#: build/templates/build/detail.html:34 common/models.py:1711
#: company/templates/company/supplier_part.html:341 order/models.py:901
#: order/models.py:1427 order/serializers.py:1209
#: order/templates/order/order_wizard/match_parts.html:30 part/forms.py:40
-#: part/models.py:2650 part/templates/part/detail.html:951
-#: part/templates/part/detail.html:1037
+#: part/models.py:2657 part/templates/part/detail.html:950
+#: part/templates/part/detail.html:1036
#: part/templates/part/part_pricing.html:16
#: part/templates/part/upload_bom.html:53
#: report/templates/report/inventree_build_order_base.html:113
@@ -1045,39 +1045,39 @@ msgstr "源库存项"
#: stock/serializers.py:291 stock/templates/stock/item_base.html:290
#: stock/templates/stock/item_base.html:298
#: templates/email/build_order_completed.html:18
-#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:691
-#: templates/js/translated/bom.js:861 templates/js/translated/build.js:458
-#: templates/js/translated/build.js:610 templates/js/translated/build.js:801
-#: templates/js/translated/build.js:1211 templates/js/translated/build.js:1708
-#: templates/js/translated/build.js:2129
+#: templates/js/translated/barcode.js:432 templates/js/translated/bom.js:692
+#: templates/js/translated/bom.js:880 templates/js/translated/build.js:474
+#: templates/js/translated/build.js:626 templates/js/translated/build.js:817
+#: templates/js/translated/build.js:1227 templates/js/translated/build.js:1724
+#: templates/js/translated/build.js:2159
#: templates/js/translated/model_renderers.js:120
#: templates/js/translated/order.js:123 templates/js/translated/order.js:1137
#: templates/js/translated/order.js:2257 templates/js/translated/order.js:2490
#: templates/js/translated/order.js:3187 templates/js/translated/order.js:3507
#: templates/js/translated/order.js:3594 templates/js/translated/order.js:3686
#: templates/js/translated/order.js:3829 templates/js/translated/order.js:4337
-#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2217
-#: templates/js/translated/part.js:2686 templates/js/translated/part.js:2727
-#: templates/js/translated/part.js:2805 templates/js/translated/stock.js:458
+#: templates/js/translated/part.js:1036 templates/js/translated/part.js:2216
+#: templates/js/translated/part.js:2685 templates/js/translated/part.js:2726
+#: templates/js/translated/part.js:2804 templates/js/translated/stock.js:458
#: templates/js/translated/stock.js:612 templates/js/translated/stock.js:782
#: templates/js/translated/stock.js:2630 templates/js/translated/stock.js:2715
msgid "Quantity"
msgstr "数量"
-#: build/models.py:1346
+#: build/models.py:1355
msgid "Stock quantity to allocate to build"
msgstr "分配到生产的数量"
-#: build/models.py:1354
+#: build/models.py:1363
msgid "Install into"
msgstr "安装到"
-#: build/models.py:1355
+#: build/models.py:1364
msgid "Destination stock item"
msgstr "目标库存项"
-#: build/serializers.py:138 build/serializers.py:674
-#: templates/js/translated/build.js:1199
+#: build/serializers.py:138 build/serializers.py:689
+#: templates/js/translated/build.js:1215
msgid "Build Output"
msgstr "生产产出"
@@ -1101,9 +1101,9 @@ msgstr "生产产出未被完成分配"
msgid "Enter quantity for build output"
msgstr "输入生产产出数量"
-#: build/serializers.py:208 build/serializers.py:665 order/models.py:318
-#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:545
-#: part/serializers.py:977 stock/models.py:463 stock/models.py:1198
+#: build/serializers.py:208 build/serializers.py:680 order/models.py:318
+#: order/serializers.py:304 order/serializers.py:459 part/serializers.py:558
+#: part/serializers.py:991 stock/models.py:462 stock/models.py:1192
#: stock/serializers.py:300
msgid "Quantity must be greater than zero"
msgstr "数量必须大于0"
@@ -1147,8 +1147,8 @@ msgstr "必须提供生产产出列表"
#: stock/serializers.py:915 stock/serializers.py:1148
#: stock/templates/stock/item_base.html:388
#: templates/js/translated/barcode.js:431
-#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:786
-#: templates/js/translated/build.js:1720 templates/js/translated/order.js:1534
+#: templates/js/translated/barcode.js:613 templates/js/translated/build.js:802
+#: templates/js/translated/build.js:1736 templates/js/translated/order.js:1534
#: templates/js/translated/order.js:3500 templates/js/translated/order.js:3605
#: templates/js/translated/order.js:3613 templates/js/translated/order.js:3694
#: templates/js/translated/part.js:181 templates/js/translated/stock.js:588
@@ -1164,7 +1164,7 @@ msgstr "已完成生产产出的仓储地点"
#: build/serializers.py:373 build/templates/build/build_base.html:145
#: build/templates/build/detail.html:62 order/models.py:646
#: order/serializers.py:482 stock/templates/stock/item_base.html:421
-#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2546
+#: templates/js/translated/barcode.js:182 templates/js/translated/build.js:2576
#: templates/js/translated/order.js:1643 templates/js/translated/order.js:1992
#: templates/js/translated/order.js:2836 templates/js/translated/stock.js:1827
#: templates/js/translated/stock.js:2599 templates/js/translated/stock.js:2731
@@ -1203,113 +1203,113 @@ msgstr ""
msgid "Deallocate before completing this build order"
msgstr ""
-#: build/serializers.py:494
+#: build/serializers.py:509
msgid "Overallocated Stock"
msgstr ""
-#: build/serializers.py:496
+#: build/serializers.py:511
msgid "How do you want to handle extra stock items assigned to the build order"
msgstr ""
-#: build/serializers.py:506
+#: build/serializers.py:521
msgid "Some stock items have been overallocated"
msgstr "一些库存项已被过度分配"
-#: build/serializers.py:511
+#: build/serializers.py:526
msgid "Accept Unallocated"
msgstr "接受未分配的"
-#: build/serializers.py:512
+#: build/serializers.py:527
msgid "Accept that stock items have not been fully allocated to this build order"
msgstr "接受库存项未被完成分配至此生产订单"
-#: build/serializers.py:522 templates/js/translated/build.js:227
+#: build/serializers.py:537 templates/js/translated/build.js:258
msgid "Required stock has not been fully allocated"
msgstr "所需库存尚未完全分配"
-#: build/serializers.py:527 order/serializers.py:208 order/serializers.py:1103
+#: build/serializers.py:542 order/serializers.py:208 order/serializers.py:1103
msgid "Accept Incomplete"
msgstr "接受未完成"
-#: build/serializers.py:528
+#: build/serializers.py:543
msgid "Accept that the required number of build outputs have not been completed"
msgstr "接受所需的生产产出未完成"
-#: build/serializers.py:538 templates/js/translated/build.js:231
+#: build/serializers.py:553 templates/js/translated/build.js:262
msgid "Required build quantity has not been completed"
msgstr "所需生产数量尚未完成"
-#: build/serializers.py:547
+#: build/serializers.py:562 templates/js/translated/build.js:246
msgid "Build order has incomplete outputs"
msgstr "生产订单有未完成的产出"
-#: build/serializers.py:577 build/serializers.py:622 part/models.py:2768
-#: part/models.py:2902
+#: build/serializers.py:592 build/serializers.py:637 part/models.py:2793
+#: part/models.py:2927
msgid "BOM Item"
msgstr "BOM项"
-#: build/serializers.py:587
+#: build/serializers.py:602
msgid "Build output"
msgstr "生产产出"
-#: build/serializers.py:595
+#: build/serializers.py:610
msgid "Build output must point to the same build"
msgstr "生产产出必须指向相同的生产"
-#: build/serializers.py:636
+#: build/serializers.py:651
msgid "bom_item.part must point to the same part as the build order"
msgstr "bom_item.part 必须与生产订单指向相同的部件"
-#: build/serializers.py:651 stock/serializers.py:767
+#: build/serializers.py:666 stock/serializers.py:767
msgid "Item must be in stock"
msgstr "项目必须在库存中"
-#: build/serializers.py:709 order/serializers.py:1093
+#: build/serializers.py:724 order/serializers.py:1093
#, python-brace-format
msgid "Available quantity ({q}) exceeded"
msgstr "可用量 ({q}) 超出了限制"
-#: build/serializers.py:715
+#: build/serializers.py:730
msgid "Build output must be specified for allocation of tracked parts"
msgstr "对于被追踪的部件的分配,必须指定生产产出"
-#: build/serializers.py:722
+#: build/serializers.py:737
msgid "Build output cannot be specified for allocation of untracked parts"
msgstr "对于未被追踪的部件,无法指定生产产出"
-#: build/serializers.py:727
+#: build/serializers.py:742
msgid "This stock item has already been allocated to this build output"
msgstr "此库存项已被分配至此生产产出"
-#: build/serializers.py:750 order/serializers.py:1373
+#: build/serializers.py:765 order/serializers.py:1373
msgid "Allocation items must be provided"
msgstr "必须提供分配的项"
-#: build/serializers.py:801
+#: build/serializers.py:820
msgid "Stock location where parts are to be sourced (leave blank to take from any location)"
msgstr "部件来源的仓储地点(留空则可来源于任何仓储地点)"
-#: build/serializers.py:809
+#: build/serializers.py:828
msgid "Exclude Location"
msgstr "排除地点"
-#: build/serializers.py:810
+#: build/serializers.py:829
msgid "Exclude stock items from this selected location"
msgstr "从该选定的仓储地点排除库存项"
-#: build/serializers.py:815
+#: build/serializers.py:834
msgid "Interchangeable Stock"
msgstr "可互换的库存"
-#: build/serializers.py:816
+#: build/serializers.py:835
msgid "Stock items in multiple locations can be used interchangeably"
msgstr "多处地点的库存项可以互换使用"
-#: build/serializers.py:821
+#: build/serializers.py:840
msgid "Substitute Stock"
msgstr "可替换的库存"
-#: build/serializers.py:822
+#: build/serializers.py:841
msgid "Allow allocation of substitute parts"
msgstr "允许分配可替换的部件"
@@ -1400,7 +1400,7 @@ msgstr ""
#: order/templates/order/order_base.html:171
#: order/templates/order/sales_order_base.html:164
#: report/templates/report/inventree_build_order_base.html:125
-#: templates/js/translated/build.js:2586 templates/js/translated/order.js:2009
+#: templates/js/translated/build.js:2616 templates/js/translated/order.js:2009
#: templates/js/translated/order.js:2351 templates/js/translated/order.js:2852
#: templates/js/translated/order.js:3892 templates/js/translated/part.js:1051
msgid "Target Date"
@@ -1415,16 +1415,16 @@ msgstr "此次生产的截止日期为 %(target)s"
#: build/templates/build/build_base.html:204
#: order/templates/order/order_base.html:107
#: order/templates/order/sales_order_base.html:94
-#: templates/js/translated/table_filters.js:320
-#: templates/js/translated/table_filters.js:361
-#: templates/js/translated/table_filters.js:391
+#: templates/js/translated/table_filters.js:328
+#: templates/js/translated/table_filters.js:369
+#: templates/js/translated/table_filters.js:399
msgid "Overdue"
msgstr "逾期"
#: build/templates/build/build_base.html:166
#: build/templates/build/detail.html:67 build/templates/build/detail.html:142
#: order/templates/order/sales_order_base.html:171
-#: templates/js/translated/table_filters.js:400
+#: templates/js/translated/table_filters.js:408
msgid "Completed"
msgstr "已完成"
@@ -1447,7 +1447,7 @@ msgstr "销售订单"
msgid "Issued By"
msgstr "发布者"
-#: build/templates/build/build_base.html:256
+#: build/templates/build/build_base.html:252
msgid "Delete Build Order"
msgstr "删除生产订单"
@@ -1478,19 +1478,19 @@ msgstr ""
#: build/templates/build/detail.html:80
#: stock/templates/stock/item_base.html:168
-#: templates/js/translated/build.js:1215
+#: templates/js/translated/build.js:1231
#: templates/js/translated/model_renderers.js:124
#: templates/js/translated/stock.js:1026 templates/js/translated/stock.js:1841
#: templates/js/translated/stock.js:2738
-#: templates/js/translated/table_filters.js:159
-#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:167
+#: templates/js/translated/table_filters.js:258
msgid "Batch"
msgstr ""
#: build/templates/build/detail.html:126
#: order/templates/order/order_base.html:158
#: order/templates/order/sales_order_base.html:158
-#: templates/js/translated/build.js:2554
+#: templates/js/translated/build.js:2584
msgid "Created"
msgstr "已创建"
@@ -1510,7 +1510,7 @@ msgstr "子生产订单"
msgid "Allocate Stock to Build"
msgstr "为生产分配库存"
-#: build/templates/build/detail.html:176 templates/js/translated/build.js:1942
+#: build/templates/build/detail.html:176 templates/js/translated/build.js:1967
msgid "Unallocate stock"
msgstr "未分配库存"
@@ -1876,9 +1876,9 @@ msgstr ""
msgid "Copy category parameter templates when creating a part"
msgstr ""
-#: common/models.py:951 part/models.py:2461 report/models.py:158
+#: common/models.py:951 part/models.py:2466 report/models.py:158
#: templates/js/translated/table_filters.js:38
-#: templates/js/translated/table_filters.js:484
+#: templates/js/translated/table_filters.js:492
msgid "Template"
msgstr "模板"
@@ -1886,9 +1886,9 @@ msgstr "模板"
msgid "Parts are templates by default"
msgstr ""
-#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1454
-#: templates/js/translated/table_filters.js:176
-#: templates/js/translated/table_filters.js:447
+#: common/models.py:958 part/models.py:894 templates/js/translated/bom.js:1471
+#: templates/js/translated/table_filters.js:184
+#: templates/js/translated/table_filters.js:455
msgid "Assembly"
msgstr "组装"
@@ -1897,7 +1897,7 @@ msgid "Parts can be assembled from other components by default"
msgstr ""
#: common/models.py:965 part/models.py:900
-#: templates/js/translated/table_filters.js:455
+#: templates/js/translated/table_filters.js:463
msgid "Component"
msgstr "组件"
@@ -1914,7 +1914,7 @@ msgid "Parts are purchaseable by default"
msgstr "商品默认可购买"
#: common/models.py:979 part/models.py:916
-#: templates/js/translated/table_filters.js:476
+#: templates/js/translated/table_filters.js:484
msgid "Salable"
msgstr "可销售"
@@ -1924,8 +1924,8 @@ msgstr "商品默认可销售"
#: common/models.py:986 part/models.py:906
#: templates/js/translated/table_filters.js:46
-#: templates/js/translated/table_filters.js:108
-#: templates/js/translated/table_filters.js:488
+#: templates/js/translated/table_filters.js:116
+#: templates/js/translated/table_filters.js:496
msgid "Trackable"
msgstr "可追踪"
@@ -1936,7 +1936,7 @@ msgstr "商品默认可跟踪"
#: common/models.py:993 part/models.py:926
#: part/templates/part/part_base.html:156
#: templates/js/translated/table_filters.js:42
-#: templates/js/translated/table_filters.js:492
+#: templates/js/translated/table_filters.js:500
msgid "Virtual"
msgstr "虚拟"
@@ -2300,7 +2300,7 @@ msgstr ""
msgid "Enable plugins to respond to internal events"
msgstr ""
-#: common/models.py:1344 common/models.py:1662
+#: common/models.py:1344 common/models.py:1672
msgid "Settings key (must be unique - case insensitive"
msgstr ""
@@ -2616,101 +2616,109 @@ msgstr ""
msgid "Display part scheduling information"
msgstr ""
-#: common/models.py:1702
+#: common/models.py:1647
+msgid "Table String Length"
+msgstr ""
+
+#: common/models.py:1648
+msgid "Maximimum length limit for strings displayed in table views"
+msgstr ""
+
+#: common/models.py:1712
msgid "Price break quantity"
msgstr ""
-#: common/models.py:1709 company/serializers.py:372
+#: common/models.py:1719 company/serializers.py:372
#: company/templates/company/supplier_part.html:346 order/models.py:942
-#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2222
+#: templates/js/translated/part.js:1103 templates/js/translated/part.js:2221
msgid "Price"
msgstr "价格"
-#: common/models.py:1710
+#: common/models.py:1720
msgid "Unit price at specified quantity"
msgstr ""
-#: common/models.py:1870 common/models.py:2048
+#: common/models.py:1880 common/models.py:2058
msgid "Endpoint"
msgstr ""
-#: common/models.py:1871
+#: common/models.py:1881
msgid "Endpoint at which this webhook is received"
msgstr ""
-#: common/models.py:1880
+#: common/models.py:1890
msgid "Name for this webhook"
msgstr ""
-#: common/models.py:1885 part/models.py:921 plugin/models.py:100
+#: common/models.py:1895 part/models.py:921 plugin/models.py:100
#: templates/js/translated/table_filters.js:34
-#: templates/js/translated/table_filters.js:104
-#: templates/js/translated/table_filters.js:316
-#: templates/js/translated/table_filters.js:442
+#: templates/js/translated/table_filters.js:112
+#: templates/js/translated/table_filters.js:324
+#: templates/js/translated/table_filters.js:450
msgid "Active"
msgstr ""
-#: common/models.py:1886
+#: common/models.py:1896
msgid "Is this webhook active"
msgstr ""
-#: common/models.py:1900
+#: common/models.py:1910
msgid "Token"
msgstr "令牌"
-#: common/models.py:1901
+#: common/models.py:1911
msgid "Token for access"
msgstr ""
-#: common/models.py:1908
+#: common/models.py:1918
msgid "Secret"
msgstr ""
-#: common/models.py:1909
+#: common/models.py:1919
msgid "Shared secret for HMAC"
msgstr ""
-#: common/models.py:2015
+#: common/models.py:2025
msgid "Message ID"
msgstr ""
-#: common/models.py:2016
+#: common/models.py:2026
msgid "Unique identifier for this message"
msgstr ""
-#: common/models.py:2024
+#: common/models.py:2034
msgid "Host"
msgstr ""
-#: common/models.py:2025
+#: common/models.py:2035
msgid "Host from which this message was received"
msgstr ""
-#: common/models.py:2032
+#: common/models.py:2042
msgid "Header"
msgstr ""
-#: common/models.py:2033
+#: common/models.py:2043
msgid "Header of this message"
msgstr ""
-#: common/models.py:2039
+#: common/models.py:2049
msgid "Body"
msgstr ""
-#: common/models.py:2040
+#: common/models.py:2050
msgid "Body of this message"
msgstr ""
-#: common/models.py:2049
+#: common/models.py:2059
msgid "Endpoint on which this message was received"
msgstr ""
-#: common/models.py:2054
+#: common/models.py:2064
msgid "Worked on"
msgstr ""
-#: common/models.py:2055
+#: common/models.py:2065
msgid "Was the work on this message finished?"
msgstr ""
@@ -2859,9 +2867,9 @@ msgstr "货币"
msgid "Default currency used for this company"
msgstr "该公司使用的默认货币"
-#: company/models.py:248 company/models.py:482 stock/models.py:545
+#: company/models.py:248 company/models.py:482 stock/models.py:544
#: stock/serializers.py:85 stock/templates/stock/item_base.html:143
-#: templates/js/translated/bom.js:542
+#: templates/js/translated/bom.js:543
msgid "Base Part"
msgstr ""
@@ -2877,7 +2885,7 @@ msgstr "选择商品"
#: templates/js/translated/company.js:533
#: templates/js/translated/company.js:668
#: templates/js/translated/company.js:956 templates/js/translated/part.js:236
-#: templates/js/translated/table_filters.js:419
+#: templates/js/translated/table_filters.js:427
msgid "Manufacturer"
msgstr "制造商"
@@ -2920,7 +2928,7 @@ msgstr "参数名称"
#: company/models.py:365
#: report/templates/report/inventree_test_report_base.html:95
-#: stock/models.py:2042 templates/js/translated/company.js:581
+#: stock/models.py:2036 templates/js/translated/company.js:581
#: templates/js/translated/company.js:799 templates/js/translated/part.js:847
#: templates/js/translated/stock.js:1360
msgid "Value"
@@ -2930,7 +2938,7 @@ msgstr "数值"
msgid "Parameter value"
msgstr "参数值"
-#: company/models.py:372 part/models.py:888 part/models.py:2421
+#: company/models.py:372 part/models.py:888 part/models.py:2426
#: part/templates/part/part_base.html:286
#: templates/InvenTree/settings/settings.html:352
#: templates/js/translated/company.js:805 templates/js/translated/part.js:853
@@ -2954,7 +2962,7 @@ msgstr ""
#: templates/js/translated/company.js:436
#: templates/js/translated/company.js:929 templates/js/translated/order.js:1975
#: templates/js/translated/part.js:217 templates/js/translated/part.js:993
-#: templates/js/translated/table_filters.js:423
+#: templates/js/translated/table_filters.js:431
msgid "Supplier"
msgstr "供应商"
@@ -2986,22 +2994,22 @@ msgid "Supplier part description"
msgstr "供应商商品描述"
#: company/models.py:523 company/templates/company/supplier_part.html:181
-#: part/models.py:2662 part/templates/part/upload_bom.html:59
+#: part/models.py:2679 part/templates/part/upload_bom.html:59
#: report/templates/report/inventree_po_report.html:92
#: report/templates/report/inventree_so_report.html:93 stock/serializers.py:399
msgid "Note"
msgstr "备注"
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "base cost"
msgstr ""
-#: company/models.py:527 part/models.py:1769
+#: company/models.py:527 part/models.py:1774
msgid "Minimum charge (e.g. stocking fee)"
msgstr "最低收费(例如库存费)"
#: company/models.py:529 company/templates/company/supplier_part.html:167
-#: stock/models.py:571 stock/templates/stock/item_base.html:243
+#: stock/models.py:570 stock/templates/stock/item_base.html:243
#: templates/js/translated/company.js:991 templates/js/translated/stock.js:1974
msgid "Packaging"
msgstr "打包"
@@ -3023,7 +3031,7 @@ msgstr ""
msgid "Unit quantity supplied in a single pack"
msgstr ""
-#: company/models.py:539 part/models.py:1771
+#: company/models.py:539 part/models.py:1776
msgid "multiple"
msgstr ""
@@ -3034,10 +3042,10 @@ msgstr ""
#: company/models.py:547 company/templates/company/supplier_part.html:115
#: templates/email/build_order_required_stock.html:19
#: templates/email/low_stock_notification.html:18
-#: templates/js/translated/bom.js:915 templates/js/translated/build.js:1823
-#: templates/js/translated/build.js:2686 templates/js/translated/part.js:598
+#: templates/js/translated/bom.js:938 templates/js/translated/build.js:1839
+#: templates/js/translated/build.js:2716 templates/js/translated/part.js:598
#: templates/js/translated/part.js:601
-#: templates/js/translated/table_filters.js:186
+#: templates/js/translated/table_filters.js:194
msgid "Available"
msgstr "空闲"
@@ -3109,13 +3117,13 @@ msgid "Download image from URL"
msgstr "从 URL 下载图片"
#: company/templates/company/company_base.html:86 order/models.py:641
-#: order/templates/order/sales_order_base.html:116 stock/models.py:590
-#: stock/models.py:591 stock/serializers.py:809
+#: order/templates/order/sales_order_base.html:116 stock/models.py:589
+#: stock/models.py:590 stock/serializers.py:809
#: stock/templates/stock/item_base.html:399
#: templates/email/overdue_sales_order.html:16
#: templates/js/translated/company.js:428 templates/js/translated/order.js:2813
#: templates/js/translated/stock.js:2563
-#: templates/js/translated/table_filters.js:427
+#: templates/js/translated/table_filters.js:435
msgid "Customer"
msgstr "客户"
@@ -3234,7 +3242,7 @@ msgid "New Sales Order"
msgstr "新建销售订单"
#: company/templates/company/detail.html:168
-#: templates/js/translated/build.js:1693
+#: templates/js/translated/build.js:1709
msgid "Assigned Stock"
msgstr ""
@@ -3312,7 +3320,7 @@ msgid "Delete parameters"
msgstr "删除参数"
#: company/templates/company/manufacturer_part.html:245
-#: part/templates/part/detail.html:840
+#: part/templates/part/detail.html:839
msgid "Add Parameter"
msgstr "添加参数"
@@ -3333,7 +3341,7 @@ msgid "Assigned Stock Items"
msgstr ""
#: company/templates/company/supplier_part.html:7
-#: company/templates/company/supplier_part.html:24 stock/models.py:554
+#: company/templates/company/supplier_part.html:24 stock/models.py:553
#: stock/templates/stock/item_base.html:236
#: templates/js/translated/company.js:945 templates/js/translated/order.js:1135
#: templates/js/translated/stock.js:1931
@@ -3444,7 +3452,7 @@ msgstr "价格信息"
#: company/templates/company/supplier_part.html:247
#: company/templates/company/supplier_part.html:388
-#: part/templates/part/prices.html:276 templates/js/translated/part.js:2294
+#: part/templates/part/prices.html:276 templates/js/translated/part.js:2293
msgid "Add Price Break"
msgstr ""
@@ -3457,12 +3465,12 @@ msgid "No price break information found"
msgstr ""
#: company/templates/company/supplier_part.html:314
-#: templates/js/translated/part.js:2304
+#: templates/js/translated/part.js:2303
msgid "Delete Price Break"
msgstr ""
#: company/templates/company/supplier_part.html:328
-#: templates/js/translated/part.js:2318
+#: templates/js/translated/part.js:2317
msgid "Edit Price Break"
msgstr ""
@@ -3488,8 +3496,8 @@ msgstr ""
#: stock/templates/stock/stock_app_base.html:10
#: templates/InvenTree/search.html:153
#: templates/InvenTree/settings/sidebar.html:45
-#: templates/js/translated/part.js:749 templates/js/translated/part.js:1334
-#: templates/js/translated/part.js:1500 templates/js/translated/stock.js:959
+#: templates/js/translated/part.js:749 templates/js/translated/part.js:1333
+#: templates/js/translated/part.js:1499 templates/js/translated/stock.js:959
#: templates/js/translated/stock.js:1756 templates/navbar.html:31
msgid "Stock"
msgstr "库存"
@@ -3793,7 +3801,7 @@ msgstr "供应商商品"
#: order/models.py:1013 order/templates/order/order_base.html:178
#: templates/js/translated/order.js:1641 templates/js/translated/order.js:2373
#: templates/js/translated/part.js:1087 templates/js/translated/part.js:1125
-#: templates/js/translated/table_filters.js:338
+#: templates/js/translated/table_filters.js:346
msgid "Received"
msgstr ""
@@ -3801,7 +3809,7 @@ msgstr ""
msgid "Number of items received"
msgstr ""
-#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:681
+#: order/models.py:1021 part/templates/part/prices.html:181 stock/models.py:680
#: stock/serializers.py:169 stock/templates/stock/item_base.html:189
#: templates/js/translated/stock.js:1962
msgid "Purchase Price"
@@ -4192,8 +4200,8 @@ msgstr "选择供应商商品"
#: part/templates/part/import_wizard/ajax_match_fields.html:64
#: part/templates/part/import_wizard/ajax_match_references.html:42
#: part/templates/part/import_wizard/match_references.html:49
-#: templates/js/translated/bom.js:77 templates/js/translated/build.js:463
-#: templates/js/translated/build.js:615 templates/js/translated/build.js:2015
+#: templates/js/translated/bom.js:77 templates/js/translated/build.js:479
+#: templates/js/translated/build.js:631 templates/js/translated/build.js:2040
#: templates/js/translated/order.js:1084 templates/js/translated/order.js:1586
#: templates/js/translated/order.js:3097 templates/js/translated/stock.js:625
#: templates/js/translated/stock.js:793
@@ -4315,8 +4323,8 @@ msgid "Pending Shipments"
msgstr ""
#: order/templates/order/sales_order_detail.html:72
-#: templates/attachment_table.html:6 templates/js/translated/bom.js:1116
-#: templates/js/translated/build.js:1923
+#: templates/attachment_table.html:6 templates/js/translated/bom.js:1133
+#: templates/js/translated/build.js:1943
msgid "Actions"
msgstr ""
@@ -4405,9 +4413,9 @@ msgid "Available Stock"
msgstr "可用库存"
#: part/bom.py:130 part/templates/part/part_base.html:213
-#: templates/js/translated/bom.js:953 templates/js/translated/build.js:1853
+#: templates/js/translated/bom.js:976 templates/js/translated/build.js:1890
#: templates/js/translated/part.js:588 templates/js/translated/part.js:608
-#: templates/js/translated/part.js:1337 templates/js/translated/part.js:1525
+#: templates/js/translated/part.js:1336 templates/js/translated/part.js:1524
#: templates/js/translated/table_filters.js:68
msgid "On Order"
msgstr ""
@@ -4436,7 +4444,7 @@ msgstr ""
msgid "Icon (optional)"
msgstr ""
-#: part/models.py:122 part/models.py:2504 part/templates/part/category.html:16
+#: part/models.py:122 part/models.py:2509 part/templates/part/category.html:16
#: part/templates/part/part_app_base.html:10
msgid "Part Category"
msgstr "商品类别"
@@ -4453,7 +4461,7 @@ msgstr "商品类别"
#: part/templates/part/category_sidebar.html:9
#: templates/InvenTree/index.html:85 templates/InvenTree/search.html:84
#: templates/InvenTree/settings/sidebar.html:41
-#: templates/js/translated/part.js:2016 templates/js/translated/search.js:146
+#: templates/js/translated/part.js:2015 templates/js/translated/search.js:146
#: templates/navbar.html:24 users/models.py:38
msgid "Parts"
msgstr "商品"
@@ -4483,7 +4491,7 @@ msgstr ""
msgid "Duplicate IPN not allowed in part settings"
msgstr "在商品设置中不允许重复的IPN"
-#: part/models.py:745 part/models.py:2558
+#: part/models.py:745 part/models.py:2565
msgid "Part name"
msgstr "商品名称"
@@ -4516,11 +4524,11 @@ msgstr "关键词"
msgid "Part keywords to improve visibility in search results"
msgstr "提高搜索结果可见性的关键字"
-#: part/models.py:783 part/models.py:2253 part/models.py:2503
+#: part/models.py:783 part/models.py:2258 part/models.py:2508
#: part/templates/part/part_base.html:263
#: templates/InvenTree/settings/settings.html:232
#: templates/js/translated/notification.js:50
-#: templates/js/translated/part.js:1479 templates/js/translated/part.js:1723
+#: templates/js/translated/part.js:1478 templates/js/translated/part.js:1722
msgid "Category"
msgstr "类别"
@@ -4529,7 +4537,7 @@ msgid "Part category"
msgstr "商品类别"
#: part/models.py:789 part/templates/part/part_base.html:272
-#: templates/js/translated/part.js:737 templates/js/translated/part.js:1430
+#: templates/js/translated/part.js:737 templates/js/translated/part.js:1429
#: templates/js/translated/stock.js:1726
msgid "IPN"
msgstr ""
@@ -4631,249 +4639,260 @@ msgstr ""
msgid "Creation User"
msgstr "新建用户"
-#: part/models.py:1771
+#: part/models.py:1776
msgid "Sell multiple"
msgstr ""
-#: part/models.py:2300
+#: part/models.py:2305
msgid "Test templates can only be created for trackable parts"
msgstr ""
-#: part/models.py:2317
+#: part/models.py:2322
msgid "Test with this name already exists for this part"
msgstr ""
-#: part/models.py:2337 templates/js/translated/part.js:2067
+#: part/models.py:2342 templates/js/translated/part.js:2066
#: templates/js/translated/stock.js:1340
msgid "Test Name"
msgstr ""
-#: part/models.py:2338
+#: part/models.py:2343
msgid "Enter a name for the test"
msgstr ""
-#: part/models.py:2343
+#: part/models.py:2348
msgid "Test Description"
msgstr ""
-#: part/models.py:2344
+#: part/models.py:2349
msgid "Enter description for this test"
msgstr ""
-#: part/models.py:2349 templates/js/translated/part.js:2076
-#: templates/js/translated/table_filters.js:302
+#: part/models.py:2354 templates/js/translated/part.js:2075
+#: templates/js/translated/table_filters.js:310
msgid "Required"
msgstr ""
-#: part/models.py:2350
+#: part/models.py:2355
msgid "Is this test required to pass?"
msgstr ""
-#: part/models.py:2355 templates/js/translated/part.js:2084
+#: part/models.py:2360 templates/js/translated/part.js:2083
msgid "Requires Value"
msgstr ""
-#: part/models.py:2356
+#: part/models.py:2361
msgid "Does this test require a value when adding a test result?"
msgstr ""
-#: part/models.py:2361 templates/js/translated/part.js:2091
+#: part/models.py:2366 templates/js/translated/part.js:2090
msgid "Requires Attachment"
msgstr ""
-#: part/models.py:2362
+#: part/models.py:2367
msgid "Does this test require a file attachment when adding a test result?"
msgstr ""
-#: part/models.py:2370
+#: part/models.py:2375
#, python-brace-format
msgid "Illegal character in template name ({c})"
msgstr ""
-#: part/models.py:2406
+#: part/models.py:2411
msgid "Parameter template name must be unique"
msgstr ""
-#: part/models.py:2414
+#: part/models.py:2419
msgid "Parameter Name"
msgstr ""
-#: part/models.py:2421
+#: part/models.py:2426
msgid "Parameter Units"
msgstr ""
-#: part/models.py:2426
+#: part/models.py:2431
msgid "Parameter description"
msgstr ""
-#: part/models.py:2459
+#: part/models.py:2464
msgid "Parent Part"
msgstr ""
-#: part/models.py:2461 part/models.py:2509 part/models.py:2510
+#: part/models.py:2466 part/models.py:2514 part/models.py:2515
#: templates/InvenTree/settings/settings.html:227
msgid "Parameter Template"
msgstr "参数模板"
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Data"
msgstr ""
-#: part/models.py:2463
+#: part/models.py:2468
msgid "Parameter Value"
msgstr ""
-#: part/models.py:2514 templates/InvenTree/settings/settings.html:236
+#: part/models.py:2519 templates/InvenTree/settings/settings.html:236
msgid "Default Value"
msgstr "默认值"
-#: part/models.py:2515
+#: part/models.py:2520
msgid "Default Parameter Value"
msgstr ""
-#: part/models.py:2550
+#: part/models.py:2557
msgid "Part ID or part name"
msgstr ""
-#: part/models.py:2553 templates/js/translated/model_renderers.js:212
+#: part/models.py:2560 templates/js/translated/model_renderers.js:212
msgid "Part ID"
msgstr "商品ID"
-#: part/models.py:2554
+#: part/models.py:2561
msgid "Unique part ID value"
msgstr ""
-#: part/models.py:2557
+#: part/models.py:2564
msgid "Part Name"
msgstr ""
-#: part/models.py:2561
+#: part/models.py:2568
msgid "Part IPN"
msgstr ""
-#: part/models.py:2562
+#: part/models.py:2569
msgid "Part IPN value"
msgstr ""
-#: part/models.py:2565
+#: part/models.py:2572
msgid "Level"
msgstr ""
-#: part/models.py:2566
+#: part/models.py:2573
msgid "BOM level"
msgstr ""
-#: part/models.py:2635
+#: part/models.py:2642
msgid "Select parent part"
msgstr ""
-#: part/models.py:2643
+#: part/models.py:2650
msgid "Sub part"
msgstr ""
-#: part/models.py:2644
+#: part/models.py:2651
msgid "Select part to be used in BOM"
msgstr ""
-#: part/models.py:2650
+#: part/models.py:2657
msgid "BOM quantity for this BOM item"
msgstr ""
-#: part/models.py:2652 part/templates/part/upload_bom.html:58
-#: templates/js/translated/bom.js:876 templates/js/translated/bom.js:1005
-#: templates/js/translated/table_filters.js:100
+#: part/models.py:2661 part/templates/part/upload_bom.html:58
+#: templates/js/translated/bom.js:899 templates/js/translated/bom.js:999
+#: templates/js/translated/table_filters.js:84
+#: templates/js/translated/table_filters.js:108
msgid "Optional"
msgstr "可选项"
-#: part/models.py:2652
+#: part/models.py:2662
msgid "This BOM item is optional"
msgstr ""
-#: part/models.py:2655 part/templates/part/upload_bom.html:55
+#: part/models.py:2667 templates/js/translated/bom.js:895
+#: templates/js/translated/bom.js:1008
+#: templates/js/translated/table_filters.js:88
+msgid "Consumable"
+msgstr ""
+
+#: part/models.py:2668
+msgid "This BOM item is consumable (it is not tracked in build orders)"
+msgstr ""
+
+#: part/models.py:2672 part/templates/part/upload_bom.html:55
msgid "Overage"
msgstr ""
-#: part/models.py:2656
+#: part/models.py:2673
msgid "Estimated build wastage quantity (absolute or percentage)"
msgstr ""
-#: part/models.py:2659
+#: part/models.py:2676
msgid "BOM item reference"
msgstr ""
-#: part/models.py:2662
+#: part/models.py:2679
msgid "BOM item notes"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "Checksum"
msgstr ""
-#: part/models.py:2664
+#: part/models.py:2681
msgid "BOM line checksum"
msgstr ""
-#: part/models.py:2668 part/templates/part/upload_bom.html:57
-#: templates/js/translated/bom.js:1022
+#: part/models.py:2685 part/templates/part/upload_bom.html:57
+#: templates/js/translated/bom.js:1025
#: templates/js/translated/table_filters.js:76
-#: templates/js/translated/table_filters.js:96
+#: templates/js/translated/table_filters.js:104
msgid "Inherited"
msgstr "继承项"
-#: part/models.py:2669
+#: part/models.py:2686
msgid "This BOM item is inherited by BOMs for variant parts"
msgstr ""
-#: part/models.py:2674 part/templates/part/upload_bom.html:56
-#: templates/js/translated/bom.js:1014
+#: part/models.py:2691 part/templates/part/upload_bom.html:56
+#: templates/js/translated/bom.js:1017
msgid "Allow Variants"
msgstr ""
-#: part/models.py:2675
+#: part/models.py:2692
msgid "Stock items for variant parts can be used for this BOM item"
msgstr ""
-#: part/models.py:2753 stock/models.py:447
+#: part/models.py:2778 stock/models.py:446
msgid "Quantity must be integer value for trackable parts"
msgstr ""
-#: part/models.py:2762 part/models.py:2764
+#: part/models.py:2787 part/models.py:2789
msgid "Sub part must be specified"
msgstr ""
-#: part/models.py:2869
+#: part/models.py:2894
msgid "BOM Item Substitute"
msgstr ""
-#: part/models.py:2890
+#: part/models.py:2915
msgid "Substitute part cannot be the same as the master part"
msgstr ""
-#: part/models.py:2903
+#: part/models.py:2928
msgid "Parent BOM item"
msgstr ""
-#: part/models.py:2911
+#: part/models.py:2936
msgid "Substitute part"
msgstr ""
-#: part/models.py:2926
+#: part/models.py:2951
msgid "Part 1"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Part 2"
msgstr ""
-#: part/models.py:2930
+#: part/models.py:2955
msgid "Select Related Part"
msgstr ""
-#: part/models.py:2948
+#: part/models.py:2973
msgid "Part relationship cannot be created between a part and itself"
msgstr ""
-#: part/models.py:2952
+#: part/models.py:2977
msgid "Duplicate relationship already exists"
msgstr ""
@@ -4881,75 +4900,75 @@ msgstr ""
msgid "Purchase currency of this stock item"
msgstr ""
-#: part/serializers.py:815
+#: part/serializers.py:829
msgid "Select part to copy BOM from"
msgstr ""
-#: part/serializers.py:823
+#: part/serializers.py:837
msgid "Remove Existing Data"
msgstr ""
-#: part/serializers.py:824
+#: part/serializers.py:838
msgid "Remove existing BOM items before copying"
msgstr ""
-#: part/serializers.py:829
+#: part/serializers.py:843
msgid "Include Inherited"
msgstr ""
-#: part/serializers.py:830
+#: part/serializers.py:844
msgid "Include BOM items which are inherited from templated parts"
msgstr ""
-#: part/serializers.py:835
+#: part/serializers.py:849
msgid "Skip Invalid Rows"
msgstr ""
-#: part/serializers.py:836
+#: part/serializers.py:850
msgid "Enable this option to skip invalid rows"
msgstr ""
-#: part/serializers.py:841
+#: part/serializers.py:855
msgid "Copy Substitute Parts"
msgstr ""
-#: part/serializers.py:842
+#: part/serializers.py:856
msgid "Copy substitute parts when duplicate BOM items"
msgstr ""
-#: part/serializers.py:882
+#: part/serializers.py:896
msgid "Clear Existing BOM"
msgstr ""
-#: part/serializers.py:883
+#: part/serializers.py:897
msgid "Delete existing BOM items before uploading"
msgstr ""
-#: part/serializers.py:913
+#: part/serializers.py:927
msgid "No part column specified"
msgstr ""
-#: part/serializers.py:956
+#: part/serializers.py:970
msgid "Multiple matching parts found"
msgstr ""
-#: part/serializers.py:959
+#: part/serializers.py:973
msgid "No matching part found"
msgstr ""
-#: part/serializers.py:962
+#: part/serializers.py:976
msgid "Part is not designated as a component"
msgstr ""
-#: part/serializers.py:971
+#: part/serializers.py:985
msgid "Quantity not provided"
msgstr ""
-#: part/serializers.py:979
+#: part/serializers.py:993
msgid "Invalid quantity"
msgstr ""
-#: part/serializers.py:1000
+#: part/serializers.py:1014
msgid "At least one BOM item is required"
msgstr ""
@@ -5243,22 +5262,22 @@ msgstr ""
msgid "Add Test Result Template"
msgstr ""
-#: part/templates/part/detail.html:914
+#: part/templates/part/detail.html:913
#, python-format
msgid "Purchase Unit Price - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:926
+#: part/templates/part/detail.html:925
#, python-format
msgid "Unit Price-Cost Difference - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:938
+#: part/templates/part/detail.html:937
#, python-format
msgid "Supplier Unit Cost - %(currency)s"
msgstr ""
-#: part/templates/part/detail.html:1027
+#: part/templates/part/detail.html:1026
#, python-format
msgid "Unit Price - %(currency)s"
msgstr ""
@@ -5412,7 +5431,7 @@ msgstr ""
#: part/templates/part/part_base.html:200
#: templates/js/translated/company.js:1027
-#: templates/js/translated/table_filters.js:201
+#: templates/js/translated/table_filters.js:209
msgid "In Stock"
msgstr ""
@@ -5426,13 +5445,13 @@ msgstr ""
msgid "Allocated to Sales Orders"
msgstr ""
-#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1043
+#: part/templates/part/part_base.html:238 templates/js/translated/bom.js:1075
msgid "Can Build"
msgstr ""
#: part/templates/part/part_base.html:244 templates/js/translated/part.js:591
-#: templates/js/translated/part.js:611 templates/js/translated/part.js:1341
-#: templates/js/translated/part.js:1532
+#: templates/js/translated/part.js:611 templates/js/translated/part.js:1340
+#: templates/js/translated/part.js:1531
msgid "Building"
msgstr ""
@@ -5488,7 +5507,7 @@ msgid "Total Cost"
msgstr ""
#: part/templates/part/part_pricing.html:40 part/templates/part/prices.html:43
-#: templates/js/translated/bom.js:997
+#: templates/js/translated/bom.js:1066
msgid "No supplier pricing available"
msgstr ""
@@ -5583,7 +5602,7 @@ msgstr ""
msgid "Calculation parameters"
msgstr ""
-#: part/templates/part/prices.html:160 templates/js/translated/bom.js:991
+#: part/templates/part/prices.html:160 templates/js/translated/bom.js:1060
msgid "Supplier Cost"
msgstr ""
@@ -5622,7 +5641,7 @@ msgid "No sale pice history available for this part."
msgstr ""
#: part/templates/part/stock_count.html:7 templates/js/translated/part.js:614
-#: templates/js/translated/part.js:1329 templates/js/translated/part.js:1331
+#: templates/js/translated/part.js:1328 templates/js/translated/part.js:1330
msgid "No Stock"
msgstr ""
@@ -5993,9 +6012,9 @@ msgid "Stock Item Test Report"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:79
-#: stock/models.py:595 stock/templates/stock/item_base.html:320
-#: templates/js/translated/build.js:456 templates/js/translated/build.js:608
-#: templates/js/translated/build.js:1209 templates/js/translated/build.js:1706
+#: stock/models.py:594 stock/templates/stock/item_base.html:320
+#: templates/js/translated/build.js:472 templates/js/translated/build.js:624
+#: templates/js/translated/build.js:1225 templates/js/translated/build.js:1722
#: templates/js/translated/model_renderers.js:118
#: templates/js/translated/order.js:121 templates/js/translated/order.js:3597
#: templates/js/translated/order.js:3684 templates/js/translated/stock.js:490
@@ -6007,12 +6026,12 @@ msgid "Test Results"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:93
-#: stock/models.py:2030
+#: stock/models.py:2024
msgid "Test"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:94
-#: stock/models.py:2036
+#: stock/models.py:2030
msgid "Result"
msgstr ""
@@ -6047,241 +6066,241 @@ msgstr ""
msgid "Serial numbers cannot be supplied for a non-trackable part"
msgstr ""
-#: stock/models.py:90 stock/models.py:686
+#: stock/models.py:90 stock/models.py:685
#: stock/templates/stock/item_base.html:250
msgid "Owner"
msgstr ""
-#: stock/models.py:91 stock/models.py:687
+#: stock/models.py:91 stock/models.py:686
msgid "Select Owner"
msgstr ""
-#: stock/models.py:421
+#: stock/models.py:420
msgid "StockItem with this serial number already exists"
msgstr ""
-#: stock/models.py:453 stock/serializers.py:93
+#: stock/models.py:452 stock/serializers.py:93
msgid "Stock item cannot be created for virtual parts"
msgstr ""
-#: stock/models.py:470
+#: stock/models.py:469
#, python-brace-format
msgid "Part type ('{pf}') must be {pe}"
msgstr "商品类型 ('{pf}') 必须是 {pe}"
-#: stock/models.py:480 stock/models.py:489
+#: stock/models.py:479 stock/models.py:488
msgid "Quantity must be 1 for item with a serial number"
msgstr ""
-#: stock/models.py:481
+#: stock/models.py:480
msgid "Serial number cannot be set if quantity greater than 1"
msgstr ""
-#: stock/models.py:503
+#: stock/models.py:502
msgid "Item cannot belong to itself"
msgstr ""
-#: stock/models.py:509
+#: stock/models.py:508
msgid "Item must have a build reference if is_building=True"
msgstr ""
-#: stock/models.py:523
+#: stock/models.py:522
msgid "Build reference does not point to the same part object"
msgstr ""
-#: stock/models.py:537
+#: stock/models.py:536
msgid "Parent Stock Item"
msgstr ""
-#: stock/models.py:547
+#: stock/models.py:546
msgid "Base part"
msgstr ""
-#: stock/models.py:555
+#: stock/models.py:554
msgid "Select a matching supplier part for this stock item"
msgstr ""
-#: stock/models.py:562 stock/templates/stock/location.html:17
+#: stock/models.py:561 stock/templates/stock/location.html:17
#: stock/templates/stock/stock_app_base.html:8
msgid "Stock Location"
msgstr "仓储地点"
-#: stock/models.py:565
+#: stock/models.py:564
msgid "Where is this stock item located?"
msgstr ""
-#: stock/models.py:572
+#: stock/models.py:571
msgid "Packaging this stock item is stored in"
msgstr ""
-#: stock/models.py:578 stock/templates/stock/item_base.html:359
+#: stock/models.py:577 stock/templates/stock/item_base.html:359
msgid "Installed In"
msgstr ""
-#: stock/models.py:581
+#: stock/models.py:580
msgid "Is this item installed in another item?"
msgstr ""
-#: stock/models.py:597
+#: stock/models.py:596
msgid "Serial number for this item"
msgstr ""
-#: stock/models.py:611
+#: stock/models.py:610
msgid "Batch code for this stock item"
msgstr ""
-#: stock/models.py:616
+#: stock/models.py:615
msgid "Stock Quantity"
msgstr ""
-#: stock/models.py:625
+#: stock/models.py:624
msgid "Source Build"
msgstr ""
-#: stock/models.py:627
+#: stock/models.py:626
msgid "Build for this stock item"
msgstr ""
-#: stock/models.py:638
+#: stock/models.py:637
msgid "Source Purchase Order"
msgstr ""
-#: stock/models.py:641
+#: stock/models.py:640
msgid "Purchase order for this stock item"
msgstr ""
-#: stock/models.py:647
+#: stock/models.py:646
msgid "Destination Sales Order"
msgstr ""
-#: stock/models.py:653 stock/templates/stock/item_base.html:427
+#: stock/models.py:652 stock/templates/stock/item_base.html:427
#: templates/js/translated/stock.js:1881
msgid "Expiry Date"
msgstr ""
-#: stock/models.py:654
+#: stock/models.py:653
msgid "Expiry date for stock item. Stock will be considered expired after this date"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete on deplete"
msgstr ""
-#: stock/models.py:667
+#: stock/models.py:666
msgid "Delete this Stock Item when stock is depleted"
msgstr ""
-#: stock/models.py:674 stock/templates/stock/item.html:132
+#: stock/models.py:673 stock/templates/stock/item.html:132
msgid "Stock Item Notes"
msgstr ""
-#: stock/models.py:682
+#: stock/models.py:681
msgid "Single unit purchase price at time of purchase"
msgstr ""
-#: stock/models.py:710
+#: stock/models.py:709
msgid "Converted to part"
msgstr ""
-#: stock/models.py:1189
+#: stock/models.py:1183
msgid "Part is not set as trackable"
msgstr ""
-#: stock/models.py:1195
+#: stock/models.py:1189
msgid "Quantity must be integer"
msgstr ""
-#: stock/models.py:1201
+#: stock/models.py:1195
#, python-brace-format
msgid "Quantity must not exceed available stock quantity ({n})"
msgstr ""
-#: stock/models.py:1204
+#: stock/models.py:1198
msgid "Serial numbers must be a list of integers"
msgstr ""
-#: stock/models.py:1207
+#: stock/models.py:1201
msgid "Quantity does not match serial numbers"
msgstr ""
-#: stock/models.py:1214
+#: stock/models.py:1208
#, python-brace-format
msgid "Serial numbers already exist: {exists}"
msgstr ""
-#: stock/models.py:1284
+#: stock/models.py:1278
msgid "Stock item has been assigned to a sales order"
msgstr ""
-#: stock/models.py:1287
+#: stock/models.py:1281
msgid "Stock item is installed in another item"
msgstr ""
-#: stock/models.py:1290
+#: stock/models.py:1284
msgid "Stock item contains other items"
msgstr ""
-#: stock/models.py:1293
+#: stock/models.py:1287
msgid "Stock item has been assigned to a customer"
msgstr ""
-#: stock/models.py:1296
+#: stock/models.py:1290
msgid "Stock item is currently in production"
msgstr ""
-#: stock/models.py:1299
+#: stock/models.py:1293
msgid "Serialized stock cannot be merged"
msgstr ""
-#: stock/models.py:1306 stock/serializers.py:959
+#: stock/models.py:1300 stock/serializers.py:959
msgid "Duplicate stock items"
msgstr ""
-#: stock/models.py:1310
+#: stock/models.py:1304
msgid "Stock items must refer to the same part"
msgstr ""
-#: stock/models.py:1314
+#: stock/models.py:1308
msgid "Stock items must refer to the same supplier part"
msgstr ""
-#: stock/models.py:1318
+#: stock/models.py:1312
msgid "Stock status codes must match"
msgstr ""
-#: stock/models.py:1487
+#: stock/models.py:1481
msgid "StockItem cannot be moved as it is not in stock"
msgstr ""
-#: stock/models.py:1948
+#: stock/models.py:1942
msgid "Entry notes"
msgstr ""
-#: stock/models.py:2006
+#: stock/models.py:2000
msgid "Value must be provided for this test"
msgstr ""
-#: stock/models.py:2012
+#: stock/models.py:2006
msgid "Attachment must be uploaded for this test"
msgstr ""
-#: stock/models.py:2031
+#: stock/models.py:2025
msgid "Test name"
msgstr ""
-#: stock/models.py:2037
+#: stock/models.py:2031
msgid "Test result"
msgstr ""
-#: stock/models.py:2043
+#: stock/models.py:2037
msgid "Test output value"
msgstr ""
-#: stock/models.py:2050
+#: stock/models.py:2044
msgid "Test result attachment"
msgstr ""
-#: stock/models.py:2056
+#: stock/models.py:2050
msgid "Test notes"
msgstr ""
@@ -6599,7 +6618,7 @@ msgid "Available Quantity"
msgstr ""
#: stock/templates/stock/item_base.html:392
-#: templates/js/translated/build.js:1729
+#: templates/js/translated/build.js:1745
msgid "No location set"
msgstr "未设置仓储地点"
@@ -6613,7 +6632,7 @@ msgid "This StockItem expired on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:431
-#: templates/js/translated/table_filters.js:269
+#: templates/js/translated/table_filters.js:277
msgid "Expired"
msgstr ""
@@ -6623,7 +6642,7 @@ msgid "This StockItem expires on %(item.expiry_date)s"
msgstr ""
#: stock/templates/stock/item_base.html:433
-#: templates/js/translated/table_filters.js:275
+#: templates/js/translated/table_filters.js:283
msgid "Stale"
msgstr ""
@@ -7433,64 +7452,64 @@ msgstr ""
msgid "Do you really want to remove the selected email address?"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:27
+#: templates/InvenTree/settings/user_display.html:28
msgid "Theme Settings"
msgstr "主题设置"
-#: templates/InvenTree/settings/user_display.html:37
+#: templates/InvenTree/settings/user_display.html:38
msgid "Select theme"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:48
+#: templates/InvenTree/settings/user_display.html:49
msgid "Set Theme"
msgstr "设置主题"
-#: templates/InvenTree/settings/user_display.html:56
+#: templates/InvenTree/settings/user_display.html:57
msgid "Language Settings"
msgstr "语言设置"
-#: templates/InvenTree/settings/user_display.html:65
+#: templates/InvenTree/settings/user_display.html:66
msgid "Select language"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:81
+#: templates/InvenTree/settings/user_display.html:82
#, python-format
msgid "%(lang_translated)s%% translated"
msgstr "%(lang_translated)s%% 已翻译"
-#: templates/InvenTree/settings/user_display.html:83
+#: templates/InvenTree/settings/user_display.html:84
msgid "No translations available"
msgstr "无可用翻译"
-#: templates/InvenTree/settings/user_display.html:90
+#: templates/InvenTree/settings/user_display.html:91
msgid "Set Language"
msgstr "设置语言"
-#: templates/InvenTree/settings/user_display.html:93
+#: templates/InvenTree/settings/user_display.html:94
msgid "Some languages are not complete"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:95
+#: templates/InvenTree/settings/user_display.html:96
msgid "Show only sufficent"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "and hidden."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:97
+#: templates/InvenTree/settings/user_display.html:98
msgid "Show them too"
msgstr ""
-#: templates/InvenTree/settings/user_display.html:104
+#: templates/InvenTree/settings/user_display.html:105
msgid "Help the translation efforts!"
msgstr "帮助翻译工作!"
-#: templates/InvenTree/settings/user_display.html:105
+#: templates/InvenTree/settings/user_display.html:106
msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged."
msgstr ""
-#: templates/InvenTree/settings/user_display.html:106
+#: templates/InvenTree/settings/user_display.html:107
msgid "InvenTree Translation Project"
msgstr ""
@@ -7787,7 +7806,7 @@ msgid "The following parts are low on required stock"
msgstr ""
#: templates/email/build_order_required_stock.html:18
-#: templates/js/translated/bom.js:1489
+#: templates/js/translated/bom.js:1506
msgid "Required Quantity"
msgstr ""
@@ -7801,7 +7820,7 @@ msgid "Click on the following link to view this part"
msgstr ""
#: templates/email/low_stock_notification.html:19
-#: templates/js/translated/part.js:2563
+#: templates/js/translated/part.js:2562
msgid "Minimum Quantity"
msgstr ""
@@ -7999,7 +8018,7 @@ msgstr ""
msgid "Row Data"
msgstr ""
-#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:620
+#: templates/js/translated/bom.js:133 templates/js/translated/bom.js:621
#: templates/js/translated/modals.js:56 templates/js/translated/modals.js:601
#: templates/js/translated/modals.js:695 templates/js/translated/modals.js:1003
#: templates/js/translated/order.js:1179 templates/modals.html:15
@@ -8069,117 +8088,118 @@ msgstr "包含供应商数据"
msgid "Include part supplier data in exported BOM"
msgstr "在导出 BOM 中包含供应商数据"
-#: templates/js/translated/bom.js:511
+#: templates/js/translated/bom.js:512
msgid "Remove substitute part"
msgstr ""
-#: templates/js/translated/bom.js:565
+#: templates/js/translated/bom.js:566
msgid "Select and add a new substitute part using the input below"
msgstr ""
-#: templates/js/translated/bom.js:576
+#: templates/js/translated/bom.js:577
msgid "Are you sure you wish to remove this substitute part link?"
msgstr ""
-#: templates/js/translated/bom.js:582
+#: templates/js/translated/bom.js:583
msgid "Remove Substitute Part"
msgstr ""
-#: templates/js/translated/bom.js:621
+#: templates/js/translated/bom.js:622
msgid "Add Substitute"
msgstr ""
-#: templates/js/translated/bom.js:622
+#: templates/js/translated/bom.js:623
msgid "Edit BOM Item Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:684
+#: templates/js/translated/bom.js:685
msgid "All selected BOM items will be deleted"
msgstr ""
-#: templates/js/translated/bom.js:700
+#: templates/js/translated/bom.js:701
msgid "Delete selected BOM items?"
msgstr ""
-#: templates/js/translated/bom.js:819
+#: templates/js/translated/bom.js:835
msgid "Load BOM for subassembly"
msgstr ""
-#: templates/js/translated/bom.js:829
+#: templates/js/translated/bom.js:845
msgid "Substitutes Available"
msgstr ""
-#: templates/js/translated/bom.js:833 templates/js/translated/build.js:1805
+#: templates/js/translated/bom.js:849 templates/js/translated/build.js:1821
msgid "Variant stock allowed"
msgstr ""
-#: templates/js/translated/bom.js:935 templates/js/translated/build.js:1857
+#: templates/js/translated/bom.js:958 templates/js/translated/build.js:1872
#: templates/js/translated/order.js:3932
msgid "No Stock Available"
msgstr ""
-#: templates/js/translated/bom.js:940 templates/js/translated/build.js:1861
+#: templates/js/translated/bom.js:963 templates/js/translated/build.js:1876
msgid "Includes variant and substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:942 templates/js/translated/build.js:1863
-#: templates/js/translated/part.js:761 templates/js/translated/part.js:1538
+#: templates/js/translated/bom.js:965 templates/js/translated/build.js:1878
+#: templates/js/translated/part.js:761 templates/js/translated/part.js:1537
msgid "Includes variant stock"
msgstr ""
-#: templates/js/translated/bom.js:944 templates/js/translated/build.js:1865
+#: templates/js/translated/bom.js:967 templates/js/translated/build.js:1880
msgid "Includes substitute stock"
msgstr ""
-#: templates/js/translated/bom.js:962
+#: templates/js/translated/bom.js:985
msgid "Substitutes"
msgstr ""
-#: templates/js/translated/bom.js:977
-msgid "Purchase Price Range"
-msgstr ""
-
-#: templates/js/translated/bom.js:984
-msgid "Purchase Price Average"
-msgstr ""
-
-#: templates/js/translated/bom.js:1033 templates/js/translated/bom.js:1153
+#: templates/js/translated/bom.js:1036 templates/js/translated/bom.js:1170
msgid "View BOM"
msgstr ""
-#: templates/js/translated/bom.js:1060
-msgid "Including On Order"
+#: templates/js/translated/bom.js:1046
+msgid "Purchase Price Range"
msgstr ""
-#: templates/js/translated/bom.js:1124
+#: templates/js/translated/bom.js:1053
+msgid "Purchase Price Average"
+msgstr ""
+
+#: templates/js/translated/bom.js:1081 templates/js/translated/build.js:1863
+#: templates/js/translated/build.js:1947
+msgid "Consumable item"
+msgstr ""
+
+#: templates/js/translated/bom.js:1141
msgid "Validate BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1126
+#: templates/js/translated/bom.js:1143
msgid "This line has been validated"
msgstr ""
-#: templates/js/translated/bom.js:1128
+#: templates/js/translated/bom.js:1145
msgid "Edit substitute parts"
msgstr ""
-#: templates/js/translated/bom.js:1130 templates/js/translated/bom.js:1292
+#: templates/js/translated/bom.js:1147 templates/js/translated/bom.js:1309
msgid "Edit BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1132
+#: templates/js/translated/bom.js:1149
msgid "Delete BOM Item"
msgstr ""
-#: templates/js/translated/bom.js:1228 templates/js/translated/build.js:1650
+#: templates/js/translated/bom.js:1245 templates/js/translated/build.js:1666
msgid "No BOM items found"
msgstr ""
-#: templates/js/translated/bom.js:1472 templates/js/translated/build.js:1789
+#: templates/js/translated/bom.js:1489 templates/js/translated/build.js:1805
msgid "Required Part"
msgstr ""
-#: templates/js/translated/bom.js:1498
+#: templates/js/translated/bom.js:1515
msgid "Inherited from parent BOM"
msgstr ""
@@ -8207,256 +8227,260 @@ msgstr ""
msgid "There are incomplete outputs remaining for this build order"
msgstr ""
-#: templates/js/translated/build.js:217
+#: templates/js/translated/build.js:239
msgid "Build order is ready to be completed"
msgstr ""
-#: templates/js/translated/build.js:222
+#: templates/js/translated/build.js:247
+msgid "This build order cannot be completed as there are incomplete outputs"
+msgstr ""
+
+#: templates/js/translated/build.js:252
msgid "Build Order is incomplete"
msgstr "生产订单未完成"
-#: templates/js/translated/build.js:254
+#: templates/js/translated/build.js:270
msgid "Complete Build Order"
msgstr "生产订单完成"
-#: templates/js/translated/build.js:295 templates/js/translated/stock.js:92
+#: templates/js/translated/build.js:311 templates/js/translated/stock.js:92
#: templates/js/translated/stock.js:214
msgid "Next available serial number"
msgstr ""
-#: templates/js/translated/build.js:297 templates/js/translated/stock.js:94
+#: templates/js/translated/build.js:313 templates/js/translated/stock.js:94
#: templates/js/translated/stock.js:216
msgid "Latest serial number"
msgstr ""
-#: templates/js/translated/build.js:306
+#: templates/js/translated/build.js:322
msgid "The Bill of Materials contains trackable parts"
msgstr ""
-#: templates/js/translated/build.js:307
+#: templates/js/translated/build.js:323
msgid "Build outputs must be generated individually"
msgstr ""
-#: templates/js/translated/build.js:315
+#: templates/js/translated/build.js:331
msgid "Trackable parts can have serial numbers specified"
msgstr "可追踪商品可以指定序列号"
-#: templates/js/translated/build.js:316
+#: templates/js/translated/build.js:332
msgid "Enter serial numbers to generate multiple single build outputs"
msgstr ""
-#: templates/js/translated/build.js:323
+#: templates/js/translated/build.js:339
msgid "Create Build Output"
msgstr "创建创建生产产出"
-#: templates/js/translated/build.js:354
+#: templates/js/translated/build.js:370
msgid "Allocate stock items to this build output"
msgstr ""
-#: templates/js/translated/build.js:365
+#: templates/js/translated/build.js:381
msgid "Unallocate stock from build output"
msgstr ""
-#: templates/js/translated/build.js:374
+#: templates/js/translated/build.js:390
msgid "Complete build output"
msgstr ""
-#: templates/js/translated/build.js:382
+#: templates/js/translated/build.js:398
msgid "Delete build output"
msgstr ""
-#: templates/js/translated/build.js:405
+#: templates/js/translated/build.js:421
msgid "Are you sure you wish to unallocate stock items from this build?"
msgstr ""
-#: templates/js/translated/build.js:423
+#: templates/js/translated/build.js:439
msgid "Unallocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:443 templates/js/translated/build.js:595
+#: templates/js/translated/build.js:459 templates/js/translated/build.js:611
msgid "Select Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:444 templates/js/translated/build.js:596
+#: templates/js/translated/build.js:460 templates/js/translated/build.js:612
msgid "At least one build output must be selected"
msgstr ""
-#: templates/js/translated/build.js:498 templates/js/translated/build.js:650
+#: templates/js/translated/build.js:514 templates/js/translated/build.js:666
msgid "Output"
msgstr ""
-#: templates/js/translated/build.js:516
+#: templates/js/translated/build.js:532
msgid "Complete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:663
+#: templates/js/translated/build.js:679
msgid "Delete Build Outputs"
msgstr ""
-#: templates/js/translated/build.js:753
+#: templates/js/translated/build.js:769
msgid "No build order allocations found"
msgstr ""
-#: templates/js/translated/build.js:790
+#: templates/js/translated/build.js:806
msgid "Location not specified"
msgstr "未指定仓储地点"
-#: templates/js/translated/build.js:1169
+#: templates/js/translated/build.js:1185
msgid "No active build outputs found"
msgstr ""
-#: templates/js/translated/build.js:1238
+#: templates/js/translated/build.js:1254
msgid "Allocated Stock"
msgstr ""
-#: templates/js/translated/build.js:1245
+#: templates/js/translated/build.js:1261
msgid "No tracked BOM items for this build"
msgstr ""
-#: templates/js/translated/build.js:1267
+#: templates/js/translated/build.js:1283
msgid "Completed Tests"
msgstr ""
-#: templates/js/translated/build.js:1272
+#: templates/js/translated/build.js:1288
msgid "No required tests for this build"
msgstr ""
-#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2697
+#: templates/js/translated/build.js:1762 templates/js/translated/build.js:2727
#: templates/js/translated/order.js:3632
msgid "Edit stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1748 templates/js/translated/build.js:2698
+#: templates/js/translated/build.js:1764 templates/js/translated/build.js:2728
#: templates/js/translated/order.js:3633
msgid "Delete stock allocation"
msgstr ""
-#: templates/js/translated/build.js:1766
+#: templates/js/translated/build.js:1782
msgid "Edit Allocation"
msgstr ""
-#: templates/js/translated/build.js:1776
+#: templates/js/translated/build.js:1792
msgid "Remove Allocation"
msgstr ""
-#: templates/js/translated/build.js:1801
+#: templates/js/translated/build.js:1817
msgid "Substitute parts available"
msgstr ""
-#: templates/js/translated/build.js:1818
+#: templates/js/translated/build.js:1834
msgid "Quantity Per"
msgstr ""
-#: templates/js/translated/build.js:1847 templates/js/translated/order.js:3939
+#: templates/js/translated/build.js:1866 templates/js/translated/order.js:3939
msgid "Insufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1849 templates/js/translated/order.js:3937
+#: templates/js/translated/build.js:1868 templates/js/translated/order.js:3937
msgid "Sufficient stock available"
msgstr ""
-#: templates/js/translated/build.js:1882 templates/js/translated/build.js:2127
-#: templates/js/translated/build.js:2693 templates/js/translated/order.js:3951
+#: templates/js/translated/build.js:1902 templates/js/translated/build.js:2157
+#: templates/js/translated/build.js:2723 templates/js/translated/order.js:3951
msgid "Allocated"
msgstr ""
-#: templates/js/translated/build.js:1930 templates/js/translated/order.js:4031
+#: templates/js/translated/build.js:1955 templates/js/translated/order.js:4031
msgid "Build stock"
msgstr ""
-#: templates/js/translated/build.js:1934 templates/stock_table.html:50
+#: templates/js/translated/build.js:1959 templates/stock_table.html:50
msgid "Order stock"
msgstr ""
-#: templates/js/translated/build.js:1937 templates/js/translated/order.js:4024
+#: templates/js/translated/build.js:1962 templates/js/translated/order.js:4024
msgid "Allocate stock"
msgstr ""
-#: templates/js/translated/build.js:1976 templates/js/translated/label.js:172
+#: templates/js/translated/build.js:2001 templates/js/translated/label.js:172
#: templates/js/translated/order.js:1007 templates/js/translated/order.js:3159
#: templates/js/translated/report.js:225
msgid "Select Parts"
msgstr "选择商品"
-#: templates/js/translated/build.js:1977 templates/js/translated/order.js:3160
+#: templates/js/translated/build.js:2002 templates/js/translated/order.js:3160
msgid "You must select at least one part to allocate"
msgstr ""
-#: templates/js/translated/build.js:2026 templates/js/translated/order.js:3108
+#: templates/js/translated/build.js:2051 templates/js/translated/order.js:3108
msgid "Specify stock allocation quantity"
msgstr ""
-#: templates/js/translated/build.js:2100
+#: templates/js/translated/build.js:2130
msgid "All Parts Allocated"
msgstr ""
-#: templates/js/translated/build.js:2101
+#: templates/js/translated/build.js:2131
msgid "All selected parts have been fully allocated"
msgstr ""
-#: templates/js/translated/build.js:2115 templates/js/translated/order.js:3174
+#: templates/js/translated/build.js:2145 templates/js/translated/order.js:3174
msgid "Select source location (leave blank to take from all locations)"
msgstr ""
-#: templates/js/translated/build.js:2143
+#: templates/js/translated/build.js:2173
msgid "Allocate Stock Items to Build Order"
msgstr ""
-#: templates/js/translated/build.js:2154 templates/js/translated/order.js:3271
+#: templates/js/translated/build.js:2184 templates/js/translated/order.js:3271
msgid "No matching stock locations"
msgstr ""
-#: templates/js/translated/build.js:2226 templates/js/translated/order.js:3348
+#: templates/js/translated/build.js:2256 templates/js/translated/order.js:3348
msgid "No matching stock items"
msgstr ""
-#: templates/js/translated/build.js:2323
+#: templates/js/translated/build.js:2353
msgid "Automatic Stock Allocation"
msgstr ""
-#: templates/js/translated/build.js:2324
+#: templates/js/translated/build.js:2354
msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines"
msgstr ""
-#: templates/js/translated/build.js:2326
+#: templates/js/translated/build.js:2356
msgid "If a location is specifed, stock will only be allocated from that location"
msgstr ""
-#: templates/js/translated/build.js:2327
+#: templates/js/translated/build.js:2357
msgid "If stock is considered interchangeable, it will be allocated from the first location it is found"
msgstr ""
-#: templates/js/translated/build.js:2328
+#: templates/js/translated/build.js:2358
msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found"
msgstr ""
-#: templates/js/translated/build.js:2349
+#: templates/js/translated/build.js:2379
msgid "Allocate Stock Items"
msgstr ""
-#: templates/js/translated/build.js:2455
+#: templates/js/translated/build.js:2485
msgid "No builds matching query"
msgstr ""
-#: templates/js/translated/build.js:2490 templates/js/translated/part.js:1422
-#: templates/js/translated/part.js:1954 templates/js/translated/stock.js:1686
+#: templates/js/translated/build.js:2520 templates/js/translated/part.js:1421
+#: templates/js/translated/part.js:1953 templates/js/translated/stock.js:1686
#: templates/js/translated/stock.js:2384
msgid "Select"
msgstr ""
-#: templates/js/translated/build.js:2504
+#: templates/js/translated/build.js:2534
msgid "Build order is overdue"
msgstr ""
-#: templates/js/translated/build.js:2532
+#: templates/js/translated/build.js:2562
msgid "Progress"
msgstr ""
-#: templates/js/translated/build.js:2568 templates/js/translated/stock.js:2651
+#: templates/js/translated/build.js:2598 templates/js/translated/stock.js:2651
msgid "No user information"
msgstr "没有用户信息"
-#: templates/js/translated/build.js:2674
+#: templates/js/translated/build.js:2704
msgid "No parts allocated for"
msgstr ""
@@ -8644,23 +8668,23 @@ msgstr ""
msgid "No results found"
msgstr ""
-#: templates/js/translated/forms.js:1922 templates/search.html:29
+#: templates/js/translated/forms.js:1923 templates/search.html:29
msgid "Searching"
msgstr ""
-#: templates/js/translated/forms.js:2175
+#: templates/js/translated/forms.js:2176
msgid "Clear input"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "File Column"
msgstr ""
-#: templates/js/translated/forms.js:2641
+#: templates/js/translated/forms.js:2642
msgid "Field Name"
msgstr ""
-#: templates/js/translated/forms.js:2653
+#: templates/js/translated/forms.js:2654
msgid "Select Columns"
msgstr ""
@@ -8672,7 +8696,7 @@ msgstr ""
msgid "NO"
msgstr ""
-#: templates/js/translated/helpers.js:362
+#: templates/js/translated/helpers.js:363
msgid "Notes updated"
msgstr ""
@@ -9091,7 +9115,7 @@ msgstr ""
#: templates/js/translated/order.js:2301 templates/js/translated/order.js:2503
#: templates/js/translated/order.js:3842 templates/js/translated/order.js:4350
-#: templates/js/translated/part.js:2196 templates/js/translated/part.js:2794
+#: templates/js/translated/part.js:2195 templates/js/translated/part.js:2793
msgid "Unit Price"
msgstr "单价"
@@ -9446,8 +9470,8 @@ msgstr ""
msgid "Copy Bill of Materials"
msgstr ""
-#: templates/js/translated/part.js:584 templates/js/translated/part.js:1520
-#: templates/js/translated/table_filters.js:468
+#: templates/js/translated/part.js:584 templates/js/translated/part.js:1519
+#: templates/js/translated/table_filters.js:476
msgid "Low stock"
msgstr ""
@@ -9483,140 +9507,140 @@ msgstr ""
msgid "Delete Part Relationship"
msgstr ""
-#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1608
+#: templates/js/translated/part.js:1291 templates/js/translated/part.js:1607
msgid "No parts found"
msgstr ""
-#: templates/js/translated/part.js:1487
+#: templates/js/translated/part.js:1486
msgid "No category"
msgstr "没有分类"
-#: templates/js/translated/part.js:1518
+#: templates/js/translated/part.js:1517
msgid "No stock"
msgstr ""
-#: templates/js/translated/part.js:1542
+#: templates/js/translated/part.js:1541
msgid "Allocated to build orders"
msgstr ""
-#: templates/js/translated/part.js:1546
+#: templates/js/translated/part.js:1545
msgid "Allocated to sales orders"
msgstr ""
-#: templates/js/translated/part.js:1632 templates/js/translated/part.js:1875
+#: templates/js/translated/part.js:1631 templates/js/translated/part.js:1874
#: templates/js/translated/stock.js:2345
msgid "Display as list"
msgstr ""
-#: templates/js/translated/part.js:1648
+#: templates/js/translated/part.js:1647
msgid "Display as grid"
msgstr ""
-#: templates/js/translated/part.js:1714
+#: templates/js/translated/part.js:1713
msgid "Set the part category for the selected parts"
msgstr ""
-#: templates/js/translated/part.js:1719
+#: templates/js/translated/part.js:1718
msgid "Set Part Category"
msgstr "设置商品类别"
-#: templates/js/translated/part.js:1724
+#: templates/js/translated/part.js:1723
msgid "Select Part Category"
msgstr ""
-#: templates/js/translated/part.js:1737
+#: templates/js/translated/part.js:1736
msgid "Category is required"
msgstr ""
-#: templates/js/translated/part.js:1894 templates/js/translated/stock.js:2364
+#: templates/js/translated/part.js:1893 templates/js/translated/stock.js:2364
msgid "Display as tree"
msgstr ""
-#: templates/js/translated/part.js:1973
+#: templates/js/translated/part.js:1972
msgid "Load Subcategories"
msgstr ""
-#: templates/js/translated/part.js:1989
+#: templates/js/translated/part.js:1988
msgid "Subscribed category"
msgstr ""
-#: templates/js/translated/part.js:2053
+#: templates/js/translated/part.js:2052
msgid "No test templates matching query"
msgstr ""
-#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1299
+#: templates/js/translated/part.js:2103 templates/js/translated/stock.js:1299
msgid "Edit test result"
msgstr ""
-#: templates/js/translated/part.js:2105 templates/js/translated/stock.js:1300
+#: templates/js/translated/part.js:2104 templates/js/translated/stock.js:1300
#: templates/js/translated/stock.js:1560
msgid "Delete test result"
msgstr ""
-#: templates/js/translated/part.js:2111
+#: templates/js/translated/part.js:2110
msgid "This test is defined for a parent part"
msgstr ""
-#: templates/js/translated/part.js:2133
+#: templates/js/translated/part.js:2132
msgid "Edit Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2147
+#: templates/js/translated/part.js:2146
msgid "Delete Test Result Template"
msgstr ""
-#: templates/js/translated/part.js:2172
+#: templates/js/translated/part.js:2171
#, python-brace-format
msgid "No ${human_name} information found"
msgstr ""
-#: templates/js/translated/part.js:2229
+#: templates/js/translated/part.js:2228
#, python-brace-format
msgid "Edit ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2230
+#: templates/js/translated/part.js:2229
#, python-brace-format
msgid "Delete ${human_name}"
msgstr ""
-#: templates/js/translated/part.js:2395 templates/js/translated/part.js:2396
+#: templates/js/translated/part.js:2394 templates/js/translated/part.js:2395
msgid "No date specified"
msgstr ""
-#: templates/js/translated/part.js:2398
+#: templates/js/translated/part.js:2397
msgid "Specified date is in the past"
msgstr ""
-#: templates/js/translated/part.js:2404
+#: templates/js/translated/part.js:2403
msgid "Speculative"
msgstr ""
-#: templates/js/translated/part.js:2454
+#: templates/js/translated/part.js:2453
msgid "No scheduling information available for this part"
msgstr ""
-#: templates/js/translated/part.js:2460
+#: templates/js/translated/part.js:2459
msgid "Error fetching scheduling information for this part"
msgstr ""
-#: templates/js/translated/part.js:2556
+#: templates/js/translated/part.js:2555
msgid "Scheduled Stock Quantities"
msgstr ""
-#: templates/js/translated/part.js:2572
+#: templates/js/translated/part.js:2571
msgid "Maximum Quantity"
msgstr ""
-#: templates/js/translated/part.js:2617
+#: templates/js/translated/part.js:2616
msgid "Minimum Stock Level"
msgstr ""
-#: templates/js/translated/part.js:2718
+#: templates/js/translated/part.js:2717
msgid "Single Price"
msgstr ""
-#: templates/js/translated/part.js:2737
+#: templates/js/translated/part.js:2736
msgid "Single Price Difference"
msgstr ""
@@ -9979,7 +10003,7 @@ msgid "Stock item is destroyed"
msgstr ""
#: templates/js/translated/stock.js:1816
-#: templates/js/translated/table_filters.js:196
+#: templates/js/translated/table_filters.js:204
msgid "Depleted"
msgstr ""
@@ -10103,215 +10127,215 @@ msgstr ""
msgid "Allow Variant Stock"
msgstr ""
-#: templates/js/translated/table_filters.js:118
-#: templates/js/translated/table_filters.js:191
+#: templates/js/translated/table_filters.js:126
+#: templates/js/translated/table_filters.js:199
msgid "Include sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:119
+#: templates/js/translated/table_filters.js:127
msgid "Include locations"
msgstr ""
-#: templates/js/translated/table_filters.js:129
-#: templates/js/translated/table_filters.js:130
-#: templates/js/translated/table_filters.js:437
+#: templates/js/translated/table_filters.js:137
+#: templates/js/translated/table_filters.js:138
+#: templates/js/translated/table_filters.js:445
msgid "Include subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:134
-#: templates/js/translated/table_filters.js:480
+#: templates/js/translated/table_filters.js:142
+#: templates/js/translated/table_filters.js:488
msgid "Subscribed"
msgstr ""
-#: templates/js/translated/table_filters.js:144
-#: templates/js/translated/table_filters.js:226
+#: templates/js/translated/table_filters.js:152
+#: templates/js/translated/table_filters.js:234
msgid "Is Serialized"
msgstr ""
-#: templates/js/translated/table_filters.js:147
-#: templates/js/translated/table_filters.js:233
+#: templates/js/translated/table_filters.js:155
+#: templates/js/translated/table_filters.js:241
msgid "Serial number GTE"
msgstr ""
-#: templates/js/translated/table_filters.js:148
-#: templates/js/translated/table_filters.js:234
+#: templates/js/translated/table_filters.js:156
+#: templates/js/translated/table_filters.js:242
msgid "Serial number greater than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:151
-#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:159
+#: templates/js/translated/table_filters.js:245
msgid "Serial number LTE"
msgstr ""
-#: templates/js/translated/table_filters.js:152
-#: templates/js/translated/table_filters.js:238
+#: templates/js/translated/table_filters.js:160
+#: templates/js/translated/table_filters.js:246
msgid "Serial number less than or equal to"
msgstr ""
-#: templates/js/translated/table_filters.js:155
-#: templates/js/translated/table_filters.js:156
-#: templates/js/translated/table_filters.js:229
-#: templates/js/translated/table_filters.js:230
+#: templates/js/translated/table_filters.js:163
+#: templates/js/translated/table_filters.js:164
+#: templates/js/translated/table_filters.js:237
+#: templates/js/translated/table_filters.js:238
msgid "Serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:160
-#: templates/js/translated/table_filters.js:251
+#: templates/js/translated/table_filters.js:168
+#: templates/js/translated/table_filters.js:259
msgid "Batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:171
-#: templates/js/translated/table_filters.js:409
+#: templates/js/translated/table_filters.js:179
+#: templates/js/translated/table_filters.js:417
msgid "Active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:172
+#: templates/js/translated/table_filters.js:180
msgid "Show stock for active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:177
+#: templates/js/translated/table_filters.js:185
msgid "Part is an assembly"
msgstr ""
-#: templates/js/translated/table_filters.js:181
+#: templates/js/translated/table_filters.js:189
msgid "Is allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:182
+#: templates/js/translated/table_filters.js:190
msgid "Item has been allocated"
msgstr ""
-#: templates/js/translated/table_filters.js:187
+#: templates/js/translated/table_filters.js:195
msgid "Stock is available for use"
msgstr ""
-#: templates/js/translated/table_filters.js:192
+#: templates/js/translated/table_filters.js:200
msgid "Include stock in sublocations"
msgstr ""
-#: templates/js/translated/table_filters.js:197
+#: templates/js/translated/table_filters.js:205
msgid "Show stock items which are depleted"
msgstr ""
-#: templates/js/translated/table_filters.js:202
+#: templates/js/translated/table_filters.js:210
msgid "Show items which are in stock"
msgstr ""
-#: templates/js/translated/table_filters.js:206
+#: templates/js/translated/table_filters.js:214
msgid "In Production"
msgstr "正在生产"
-#: templates/js/translated/table_filters.js:207
+#: templates/js/translated/table_filters.js:215
msgid "Show items which are in production"
msgstr "显示正在生产的项目"
-#: templates/js/translated/table_filters.js:211
+#: templates/js/translated/table_filters.js:219
msgid "Include Variants"
msgstr ""
-#: templates/js/translated/table_filters.js:212
+#: templates/js/translated/table_filters.js:220
msgid "Include stock items for variant parts"
msgstr ""
-#: templates/js/translated/table_filters.js:216
+#: templates/js/translated/table_filters.js:224
msgid "Installed"
msgstr ""
-#: templates/js/translated/table_filters.js:217
+#: templates/js/translated/table_filters.js:225
msgid "Show stock items which are installed in another item"
msgstr ""
-#: templates/js/translated/table_filters.js:222
+#: templates/js/translated/table_filters.js:230
msgid "Show items which have been assigned to a customer"
msgstr ""
-#: templates/js/translated/table_filters.js:242
-#: templates/js/translated/table_filters.js:243
+#: templates/js/translated/table_filters.js:250
+#: templates/js/translated/table_filters.js:251
msgid "Stock status"
msgstr ""
-#: templates/js/translated/table_filters.js:246
+#: templates/js/translated/table_filters.js:254
msgid "Has batch code"
msgstr ""
-#: templates/js/translated/table_filters.js:254
+#: templates/js/translated/table_filters.js:262
msgid "Tracked"
msgstr ""
-#: templates/js/translated/table_filters.js:255
+#: templates/js/translated/table_filters.js:263
msgid "Stock item is tracked by either batch code or serial number"
msgstr ""
-#: templates/js/translated/table_filters.js:260
+#: templates/js/translated/table_filters.js:268
msgid "Has purchase price"
msgstr ""
-#: templates/js/translated/table_filters.js:261
+#: templates/js/translated/table_filters.js:269
msgid "Show stock items which have a purchase price set"
msgstr ""
-#: templates/js/translated/table_filters.js:270
+#: templates/js/translated/table_filters.js:278
msgid "Show stock items which have expired"
msgstr ""
-#: templates/js/translated/table_filters.js:276
+#: templates/js/translated/table_filters.js:284
msgid "Show stock which is close to expiring"
msgstr ""
-#: templates/js/translated/table_filters.js:288
+#: templates/js/translated/table_filters.js:296
msgid "Test Passed"
msgstr ""
-#: templates/js/translated/table_filters.js:292
+#: templates/js/translated/table_filters.js:300
msgid "Include Installed Items"
msgstr ""
-#: templates/js/translated/table_filters.js:311
+#: templates/js/translated/table_filters.js:319
msgid "Build status"
msgstr "生产状态"
-#: templates/js/translated/table_filters.js:324
-#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:332
+#: templates/js/translated/table_filters.js:373
msgid "Assigned to me"
msgstr ""
-#: templates/js/translated/table_filters.js:341
-#: templates/js/translated/table_filters.js:352
-#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:349
+#: templates/js/translated/table_filters.js:360
+#: templates/js/translated/table_filters.js:390
msgid "Order status"
msgstr ""
-#: templates/js/translated/table_filters.js:357
-#: templates/js/translated/table_filters.js:374
-#: templates/js/translated/table_filters.js:387
+#: templates/js/translated/table_filters.js:365
+#: templates/js/translated/table_filters.js:382
+#: templates/js/translated/table_filters.js:395
msgid "Outstanding"
msgstr ""
-#: templates/js/translated/table_filters.js:438
+#: templates/js/translated/table_filters.js:446
msgid "Include parts in subcategories"
msgstr ""
-#: templates/js/translated/table_filters.js:443
+#: templates/js/translated/table_filters.js:451
msgid "Show active parts"
msgstr ""
-#: templates/js/translated/table_filters.js:451
+#: templates/js/translated/table_filters.js:459
msgid "Available stock"
msgstr ""
-#: templates/js/translated/table_filters.js:459
+#: templates/js/translated/table_filters.js:467
msgid "Has IPN"
msgstr ""
-#: templates/js/translated/table_filters.js:460
+#: templates/js/translated/table_filters.js:468
msgid "Part has internal part number"
msgstr "商品有内部编号"
-#: templates/js/translated/table_filters.js:464
+#: templates/js/translated/table_filters.js:472
msgid "In stock"
msgstr ""
-#: templates/js/translated/table_filters.js:472
+#: templates/js/translated/table_filters.js:480
msgid "Purchasable"
msgstr ""
diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py
index 42c1b84b59..59fba9b2c8 100644
--- a/InvenTree/part/api.py
+++ b/InvenTree/part/api.py
@@ -1605,6 +1605,20 @@ class PartParameterList(ListCreateAPI):
queryset = PartParameter.objects.all()
serializer_class = part_serializers.PartParameterSerializer
+ def get_serializer(self, *args, **kwargs):
+ """Return the serializer instance for this API endpoint.
+
+ If requested, extra detail fields are annotated to the queryset:
+ - template_detail
+ """
+
+ try:
+ kwargs['template_detail'] = str2bool(self.request.GET.get('template_detail', True))
+ except AttributeError:
+ pass
+
+ return self.serializer_class(*args, **kwargs)
+
filter_backends = [
DjangoFilterBackend
]
@@ -1626,8 +1640,9 @@ class BomFilter(rest_filters.FilterSet):
"""Custom filters for the BOM list."""
# Boolean filters for BOM item
- optional = rest_filters.BooleanFilter(label='BOM line is optional')
- inherited = rest_filters.BooleanFilter(label='BOM line is inherited')
+ optional = rest_filters.BooleanFilter(label='BOM item is optional')
+ consumable = rest_filters.BooleanFilter(label='BOM item is consumable')
+ inherited = rest_filters.BooleanFilter(label='BOM item is inherited')
allow_variants = rest_filters.BooleanFilter(label='Variants are allowed')
# Filters for linked 'part'
diff --git a/InvenTree/part/migrations/0087_bomitem_consumable.py b/InvenTree/part/migrations/0087_bomitem_consumable.py
new file mode 100644
index 0000000000..79c793c99a
--- /dev/null
+++ b/InvenTree/part/migrations/0087_bomitem_consumable.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.13 on 2022-04-28 00:08
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('part', '0086_auto_20220912_0007'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='bomitem',
+ name='consumable',
+ field=models.BooleanField(default=False, help_text='This BOM item is consumable (it is not tracked in build orders)', verbose_name='Consumable'),
+ ),
+ ]
diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py
index 6fe06e49db..5ab60edbd5 100644
--- a/InvenTree/part/models.py
+++ b/InvenTree/part/models.py
@@ -1134,7 +1134,12 @@ class Part(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel):
total = None
# Prefetch related tables, to reduce query expense
- queryset = self.get_bom_items().prefetch_related(
+ queryset = self.get_bom_items()
+
+ # Ignore 'consumable' BOM items for this calculation
+ queryset = queryset.filter(consumable=False)
+
+ queryset = queryset.prefetch_related(
'sub_part__stock_items',
'sub_part__stock_items__allocations',
'sub_part__stock_items__sales_order_allocations',
@@ -2526,6 +2531,7 @@ class BomItem(DataImportMixin, models.Model):
sub_part: Link to the child part (the part that will be consumed)
quantity: Number of 'sub_parts' consumed to produce one 'part'
optional: Boolean field describing if this BomItem is optional
+ consumable: Boolean field describing if this BomItem is considered a 'consumable'
reference: BOM reference field (e.g. part designators)
overage: Estimated losses for a Build. Can be expressed as absolute value (e.g. '7') or a percentage (e.g. '2%')
note: Note field for this BOM item
@@ -2544,6 +2550,7 @@ class BomItem(DataImportMixin, models.Model):
'allow_variants': {},
'inherited': {},
'optional': {},
+ 'consumable': {},
'note': {},
'part': {
'label': _('Part'),
@@ -2649,7 +2656,17 @@ class BomItem(DataImportMixin, models.Model):
# Quantity required
quantity = models.DecimalField(default=1.0, max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], verbose_name=_('Quantity'), help_text=_('BOM quantity for this BOM item'))
- optional = models.BooleanField(default=False, verbose_name=_('Optional'), help_text=_("This BOM item is optional"))
+ optional = models.BooleanField(
+ default=False,
+ verbose_name=_('Optional'),
+ help_text=_("This BOM item is optional")
+ )
+
+ consumable = models.BooleanField(
+ default=False,
+ verbose_name=_('Consumable'),
+ help_text=_("This BOM item is consumable (it is not tracked in build orders)")
+ )
overage = models.CharField(max_length=24, blank=True, validators=[validators.validate_overage],
verbose_name=_('Overage'),
@@ -2698,6 +2715,14 @@ class BomItem(DataImportMixin, models.Model):
result_hash.update(str(self.optional).encode())
result_hash.update(str(self.inherited).encode())
+ # Optionally encoded for backwards compatibility
+ if self.consumable:
+ result_hash.update(str(self.consumable).encode())
+
+ # Optionally encoded for backwards compatibility
+ if self.allow_variants:
+ result_hash.update(str(self.allow_variants).encode())
+
return str(result_hash.digest())
def validate_hash(self, valid=True):
diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py
index a757f566b6..5a8aafb0b2 100644
--- a/InvenTree/part/serializers.py
+++ b/InvenTree/part/serializers.py
@@ -247,6 +247,19 @@ class PartParameterTemplateSerializer(InvenTreeModelSerializer):
class PartParameterSerializer(InvenTreeModelSerializer):
"""JSON serializers for the PartParameter model."""
+ def __init__(self, *args, **kwargs):
+ """Custom initialization method for the serializer.
+
+ Allows us to optionally include or exclude particular information
+ """
+
+ template_detail = kwargs.pop('template_detail', False)
+
+ super().__init__(*args, **kwargs)
+
+ if not template_detail:
+ self.fields.pop('template_detail')
+
template_detail = PartParameterTemplateSerializer(source='template', many=False, read_only=True)
class Meta:
@@ -747,6 +760,7 @@ class BomItemSerializer(InvenTreeModelSerializer):
'inherited',
'note',
'optional',
+ 'consumable',
'overage',
'pk',
'part',
diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html
index 86ad10f35e..b32ca706f3 100644
--- a/InvenTree/part/templates/part/detail.html
+++ b/InvenTree/part/templates/part/detail.html
@@ -813,7 +813,6 @@
onPanelLoad("part-parameters", function() {
loadPartParameterTable(
'#parameter-table',
- '{% url "api-part-parameter-list" %}',
{
params: {
part: {{ part.pk }},
diff --git a/InvenTree/part/test_bom_export.py b/InvenTree/part/test_bom_export.py
index d7e92d1da4..ed93c0f54d 100644
--- a/InvenTree/part/test_bom_export.py
+++ b/InvenTree/part/test_bom_export.py
@@ -118,6 +118,7 @@ class BomExportTest(InvenTreeTestCase):
'sub_assembly',
'quantity',
'optional',
+ 'consumable',
'overage',
'reference',
'note',
diff --git a/InvenTree/part/test_bom_item.py b/InvenTree/part/test_bom_item.py
index 58c5dfb032..266ae94aec 100644
--- a/InvenTree/part/test_bom_item.py
+++ b/InvenTree/part/test_bom_item.py
@@ -7,6 +7,8 @@ import django.core.exceptions as django_exceptions
from django.db import transaction
from django.test import TestCase
+import stock.models
+
from .models import BomItem, BomItemSubstitute, Part
@@ -197,3 +199,49 @@ class BomItemTest(TestCase):
# The substitution links should have been automatically removed
self.assertEqual(bom_item.substitutes.count(), 0)
+
+ def test_consumable(self):
+ """Tests for the 'consumable' BomItem field"""
+
+ # Create an assembly part
+ assembly = Part.objects.create(name="An assembly", description="Made with parts", assembly=True)
+
+ # No BOM information initially
+ self.assertEqual(assembly.can_build, 0)
+
+ # Create some component items
+ c1 = Part.objects.create(name="C1", description="C1")
+ c2 = Part.objects.create(name="C2", description="C2")
+ c3 = Part.objects.create(name="C3", description="C3")
+ c4 = Part.objects.create(name="C4", description="C4")
+
+ for p in [c1, c2, c3, c4]:
+ # Ensure we have stock
+ stock.models.StockItem.objects.create(part=p, quantity=1000)
+
+ # Create some BOM items
+ BomItem.objects.create(
+ part=assembly,
+ sub_part=c1,
+ quantity=10
+ )
+
+ self.assertEqual(assembly.can_build, 100)
+
+ BomItem.objects.create(
+ part=assembly,
+ sub_part=c2,
+ quantity=50,
+ consumable=True
+ )
+
+ # A 'consumable' BomItem does not alter the can_build calculation
+ self.assertEqual(assembly.can_build, 100)
+
+ BomItem.objects.create(
+ part=assembly,
+ sub_part=c3,
+ quantity=50,
+ )
+
+ self.assertEqual(assembly.can_build, 20)
diff --git a/InvenTree/stock/migrations/0088_remove_stockitem_infinite.py b/InvenTree/stock/migrations/0088_remove_stockitem_infinite.py
new file mode 100644
index 0000000000..65df560bf6
--- /dev/null
+++ b/InvenTree/stock/migrations/0088_remove_stockitem_infinite.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.15 on 2022-09-22 02:23
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('stock', '0087_auto_20220912_2341'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='stockitem',
+ name='infinite',
+ ),
+ ]
diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py
index 3724653eab..60d994def1 100644
--- a/InvenTree/stock/models.py
+++ b/InvenTree/stock/models.py
@@ -224,7 +224,6 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel):
build: Link to a Build (if this stock item was created from a build)
is_building: Boolean field indicating if this stock item is currently being built (or is "in production")
purchase_order: Link to a PurchaseOrder (if this stock item was created from a PurchaseOrder)
- infinite: If True this StockItem can never be exhausted
sales_order: Link to a SalesOrder object (if the StockItem has been assigned to a SalesOrder)
purchase_price: The unit purchase price for this StockItem - this is the unit price at time of purchase (if this item was purchased from an external supplier)
packaging: Description of how the StockItem is packaged (e.g. "reel", "loose", "tape" etc)
@@ -882,11 +881,6 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel):
self.save()
- # If stock item is incoming, an (optional) ETA field
- # expected_arrival = models.DateField(null=True, blank=True)
-
- infinite = models.BooleanField(default=False)
-
def is_allocated(self):
"""Return True if this StockItem is allocated to a SalesOrder or a Build."""
# TODO - For now this only checks if the StockItem is allocated to a SalesOrder
@@ -1565,7 +1559,7 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel):
except InvalidOperation:
return False
- if count < 0 or self.infinite:
+ if count < 0:
return False
self.stocktake_date = datetime.now().date()
@@ -1601,7 +1595,7 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel):
return False
# Ignore amounts that do not make sense
- if quantity <= 0 or self.infinite:
+ if quantity <= 0:
return False
if self.updateQuantity(self.quantity + quantity):
@@ -1630,7 +1624,7 @@ class StockItem(InvenTreeBarcodeMixin, MetadataMixin, MPTTModel):
except InvalidOperation:
return False
- if quantity <= 0 or self.infinite:
+ if quantity <= 0:
return False
if self.updateQuantity(self.quantity - quantity):
diff --git a/InvenTree/templates/InvenTree/settings/user_display.html b/InvenTree/templates/InvenTree/settings/user_display.html
index 1e0b4a1ca3..136725b951 100644
--- a/InvenTree/templates/InvenTree/settings/user_display.html
+++ b/InvenTree/templates/InvenTree/settings/user_display.html
@@ -19,6 +19,7 @@
{% include "InvenTree/settings/setting.html" with key="FORMS_CLOSE_USING_ESCAPE" icon="fa-window-close" user_setting=True %}
{% include "InvenTree/settings/setting.html" with key="PART_SHOW_QUANTITY_IN_FORMS" icon="fa-hashtag" user_setting=True %}
{% include "InvenTree/settings/setting.html" with key="DISPLAY_SCHEDULE_TAB" icon="fa-calendar-alt" user_setting=True %}
+ {% include "InvenTree/settings/setting.html" with key="TABLE_STRING_MAX_LENGTH" icon="fa-table" user_setting=True %}
diff --git a/InvenTree/templates/js/dynamic/nav.js b/InvenTree/templates/js/dynamic/nav.js
index 05fc50abd8..37d094bddd 100644
--- a/InvenTree/templates/js/dynamic/nav.js
+++ b/InvenTree/templates/js/dynamic/nav.js
@@ -154,7 +154,7 @@ function enableBreadcrumbTree(options) {
var label = options.label;
if (!label) {
- console.log('ERROR: enableBreadcrumbTree called without supplying label');
+ console.error('enableBreadcrumbTree called without supplying label');
return;
}
diff --git a/InvenTree/templates/js/translated/bom.js b/InvenTree/templates/js/translated/bom.js
index e41b96cd09..ece5973f0f 100644
--- a/InvenTree/templates/js/translated/bom.js
+++ b/InvenTree/templates/js/translated/bom.js
@@ -382,6 +382,7 @@ function bomItemFields() {
note: {},
allow_variants: {},
inherited: {},
+ consumable: {},
optional: {},
};
@@ -761,7 +762,22 @@ function loadBomTable(table, options={}) {
}
return available;
+ }
+ function canBuildQuantity(row) {
+ // Calculate how many of each row we can make, given current stock
+
+ if (row.consumable) {
+ // If the row is "consumable" we do not 'track' the quantity
+ return Infinity;
+ }
+
+ // Prevent div-by-zero or negative errors
+ if ((row.quantity || 0) <= 0) {
+ return 0;
+ }
+
+ return availableQuantity(row) / row.quantity;
}
// Construct the table columns
@@ -796,7 +812,7 @@ function loadBomTable(table, options={}) {
// Part column
cols.push(
{
- field: 'sub_part_detail.full_name',
+ field: 'sub_part',
title: '{% trans "Part" %}',
sortable: true,
switchable: false,
@@ -844,6 +860,9 @@ function loadBomTable(table, options={}) {
{
field: 'sub_part_detail.description',
title: '{% trans "Description" %}',
+ formatter: function(value) {
+ return withTitle(shortenString(value), value);
+ }
}
);
@@ -872,8 +891,12 @@ function loadBomTable(table, options={}) {
text += ` ${row.sub_part_detail.units}`;
}
+ if (row.consumable) {
+ text += ` ({% trans "Consumable" %})`;
+ }
+
if (row.optional) {
- text += ' ({% trans "Optional" %})';
+ text += ' ({% trans "Optional" %})';
}
if (row.overage) {
@@ -966,40 +989,11 @@ function loadBomTable(table, options={}) {
if (row.substitutes && row.substitutes.length > 0) {
return row.substitutes.length;
} else {
- return `-`;
+ return yesNoLabel(false);
}
}
});
- if (show_pricing) {
- cols.push({
- field: 'purchase_price_range',
- title: '{% trans "Purchase Price Range" %}',
- searchable: false,
- sortable: true,
- });
-
- cols.push({
- field: 'purchase_price_avg',
- title: '{% trans "Purchase Price Average" %}',
- searchable: false,
- sortable: true,
- });
-
- cols.push({
- field: 'price_range',
- title: '{% trans "Supplier Cost" %}',
- sortable: true,
- formatter: function(value) {
- if (value) {
- return value;
- } else {
- return `{% trans 'No supplier pricing available' %}`;
- }
- }
- });
- }
-
cols.push({
field: 'optional',
title: '{% trans "Optional" %}',
@@ -1009,6 +1003,15 @@ function loadBomTable(table, options={}) {
}
});
+ cols.push({
+ field: 'consumable',
+ title: '{% trans "Consumable" %}',
+ searchable: false,
+ formatter: function(value) {
+ return yesNoLabel(value);
+ }
+ });
+
cols.push({
field: 'allow_variants',
title: '{% trans "Allow Variants" %}',
@@ -1037,36 +1040,63 @@ function loadBomTable(table, options={}) {
}
});
+ if (show_pricing) {
+ cols.push({
+ field: 'purchase_price_range',
+ title: '{% trans "Purchase Price Range" %}',
+ searchable: false,
+ sortable: true,
+ });
+
+ cols.push({
+ field: 'purchase_price_avg',
+ title: '{% trans "Purchase Price Average" %}',
+ searchable: false,
+ sortable: true,
+ });
+
+ cols.push({
+ field: 'price_range',
+ title: '{% trans "Supplier Cost" %}',
+ sortable: true,
+ formatter: function(value) {
+ if (value) {
+ return value;
+ } else {
+ return `{% trans 'No supplier pricing available' %}`;
+ }
+ }
+ });
+ }
+
cols.push(
{
field: 'can_build',
title: '{% trans "Can Build" %}',
+ sortable: true,
formatter: function(value, row) {
- var can_build = 0;
- var available = availableQuantity(row);
-
- if (row.quantity > 0) {
- can_build = available / row.quantity;
+ // "Consumable" parts are not tracked in the build
+ if (row.consumable) {
+ return `{% trans "Consumable item" %}`;
}
- var text = formatDecimal(can_build, 2);
+ var can_build = canBuildQuantity(row);
- // Take "on order" quantity into account
- if (row.on_order && row.on_order > 0 && row.quantity > 0) {
- available += row.on_order;
- can_build = available / row.quantity;
+ return +can_build.toFixed(2);
+ },
+ sorter: function(valA, valB, rowA, rowB) {
+ // Function to sort the "can build" quantity
+ var cb_a = canBuildQuantity(rowA);
+ var cb_b = canBuildQuantity(rowB);
- text += ``;
- }
-
- return text;
+ return (cb_a > cb_b) ? 1 : -1;
},
footerFormatter: function(data) {
var can_build = null;
data.forEach(function(row) {
- if (row.part == options.parent_id && row.quantity > 0) {
+ if (row.quantity > 0 && !row.consumable) {
var cb = availableQuantity(row) / row.quantity;
if (can_build == null || cb < can_build) {
@@ -1080,23 +1110,7 @@ function loadBomTable(table, options={}) {
} else {
return formatDecimal(can_build, 2);
}
- },
- sorter: function(valA, valB, rowA, rowB) {
- // Function to sort the "can build" quantity
- var cb_a = 0;
- var cb_b = 0;
-
- if (rowA.quantity > 0) {
- cb_a = availableQuantity(rowA) / rowA.quantity;
- }
-
- if (rowB.quantity > 0) {
- cb_b = availableQuantity(rowB) / rowB.quantity;
- }
-
- return (cb_a > cb_b) ? 1 : -1;
- },
- sortable: true,
+ }
}
);
@@ -1107,6 +1121,9 @@ function loadBomTable(table, options={}) {
title: '{% trans "Notes" %}',
searchable: true,
sortable: true,
+ formatter: function(value) {
+ return withTitle(shortenString(value), value);
+ }
}
);
@@ -1177,12 +1194,15 @@ function loadBomTable(table, options={}) {
response[idx].parentId = bom_pk;
}
- var row = $(table).bootstrapTable('getRowByUniqueId', bom_pk);
+ var row = table.bootstrapTable('getRowByUniqueId', bom_pk);
row.sub_assembly_received = true;
- $(table).bootstrapTable('updateByUniqueId', bom_pk, row, true);
+ table.bootstrapTable('updateByUniqueId', bom_pk, row, true);
table.bootstrapTable('append', response);
+
+ // Auto-expand the newly added row
+ $(`.treegrid-${bom_pk}`).treegrid('expand');
},
error: function(xhr) {
console.error('Error requesting BOM for part=' + part_pk);
@@ -1235,28 +1255,39 @@ function loadBomTable(table, options={}) {
table.treegrid({
treeColumn: 1,
- onExpand: function() {
- }
});
table.treegrid('collapseAll');
// Callback for 'load sub assembly' button
- $(table).find('.load-sub-assembly').click(function(event) {
+ table.find('.load-sub-assembly').click(function(event) {
event.preventDefault();
var pk = $(this).attr('pk');
- var row = $(table).bootstrapTable('getRowByUniqueId', pk);
+ var row = table.bootstrapTable('getRowByUniqueId', pk);
// Request BOM data for this subassembly
requestSubItems(row.pk, row.sub_part);
row.sub_assembly_requested = true;
- $(table).bootstrapTable('updateByUniqueId', pk, row, true);
+ table.bootstrapTable('updateByUniqueId', pk, row, true);
});
+
+ var data = table.bootstrapTable('getData');
+
+ for (var idx = 0; idx < data.length; idx++) {
+ var row = data[idx];
+
+ if (!row.parentId) {
+ row.parentId = parent_id;
+
+ table.bootstrapTable('updateByUniqueId', row.pk, row, true);
+ }
+ }
},
- onLoadSuccess: function() {
+ onLoadSuccess: function(data) {
+
if (options.editable) {
table.bootstrapTable('uncheckAll');
}
diff --git a/InvenTree/templates/js/translated/build.js b/InvenTree/templates/js/translated/build.js
index deecfb9213..1e3eb85aa2 100644
--- a/InvenTree/templates/js/translated/build.js
+++ b/InvenTree/templates/js/translated/build.js
@@ -201,58 +201,74 @@ function cancelBuildOrder(build_id, options={}) {
/* Construct a form to "complete" (finish) a build order */
function completeBuildOrder(build_id, options={}) {
- var url = `/api/build/${build_id}/finish/`;
+ constructForm(`/api/build/${build_id}/finish/`, {
+ fieldsFunction: function(opts) {
+ var ctx = opts.context || {};
- var fields = {
- accept_unallocated: {},
- accept_overallocated: {},
- accept_incomplete: {},
- };
+ var fields = {
+ accept_unallocated: {},
+ accept_overallocated: {},
+ accept_incomplete: {},
+ };
- var html = '';
+ // Hide "accept overallocated" field if the build is *not* overallocated
+ if (!ctx.overallocated) {
+ delete fields.accept_overallocated;
+ }
- if (options.allocated && options.completed) {
- html += `
-
- {% trans "Build order is ready to be completed" %}
-
`;
- } else {
- html += `
-
- {% trans "Build Order is incomplete" %}
-
- `;
+ // Hide "accept incomplete" field if the build has been completed
+ if (!ctx.remaining || ctx.remaining == 0) {
+ delete fields.accept_incomplete;
+ }
- if (!options.allocated) {
- html += `{% trans "Required stock has not been fully allocated" %}
`;
- }
+ // Hide "accept unallocated" field if the build is fully allocated
+ if (ctx.allocated) {
+ delete fields.accept_unallocated;
+ }
- if (!options.completed) {
- html += `{% trans "Required build quantity has not been completed" %}
`;
- }
- }
+ return fields;
+ },
+ preFormContent: function(opts) {
+ var ctx = opts.context || {};
- // Hide particular fields if they are not required
+ var html = '';
- if (options.allocated) {
- delete fields.accept_unallocated;
- }
+ if (ctx.allocated && ctx.remaining == 0 && ctx.incomplete == 0) {
+ html += `
+
+ {% trans "Build order is ready to be completed" %}'
+
`;
+ } else {
- if (options.completed) {
- delete fields.accept_incomplete;
- }
+ if (ctx.incomplete > 0) {
+ html += `
+
+ {% trans "Build order has incomplete outputs" %}
+ {% trans "This build order cannot be completed as there are incomplete outputs" %}
+
`;
+ } else {
+ html += `
+
+ {% trans "Build Order is incomplete" %}
+
+ `;
+ }
- if (!options.overallocated) {
- delete fields.accept_overallocated;
- }
+ if (!ctx.allocated) {
+ html += `{% trans "Required stock has not been fully allocated" %}
`;
+ }
- constructForm(url, {
- fields: fields,
+ if (ctx.remaining > 0) {
+ html += `{% trans "Required build quantity has not been completed" %}
`;
+ }
+ }
+
+ return html;
+ },
reload: true,
confirm: true,
- method: 'POST',
title: '{% trans "Complete Build Order" %}',
- preFormContent: html,
+ method: 'POST',
});
}
@@ -1843,33 +1859,37 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
var icons = '';
- if (available_stock < (required - allocated)) {
- icons += ``;
+ if (row.consumable) {
+ icons += ``;
} else {
- icons += ``;
+ if (available_stock < (required - allocated)) {
+ icons += ``;
+ } else {
+ icons += ``;
+ }
+
+ if (available_stock <= 0) {
+ icons += `{% trans "No Stock Available" %}`;
+ } else {
+ var extra = '';
+ if ((substitute_stock > 0) && (variant_stock > 0)) {
+ extra = '{% trans "Includes variant and substitute stock" %}';
+ } else if (variant_stock > 0) {
+ extra = '{% trans "Includes variant stock" %}';
+ } else if (substitute_stock > 0) {
+ extra = '{% trans "Includes substitute stock" %}';
+ }
+
+ if (extra) {
+ icons += ``;
+ }
+ }
}
if (row.on_order && row.on_order > 0) {
icons += ``;
}
- if (available_stock <= 0) {
- icons += `{% trans "No Stock Available" %}`;
- } else {
- var extra = '';
- if ((substitute_stock > 0) && (variant_stock > 0)) {
- extra = '{% trans "Includes variant and substitute stock" %}';
- } else if (variant_stock > 0) {
- extra = '{% trans "Includes variant stock" %}';
- } else if (substitute_stock > 0) {
- extra = '{% trans "Includes substitute stock" %}';
- }
-
- if (extra) {
- icons += ``;
- }
- }
-
return renderLink(text, url) + icons;
},
sorter: function(valA, valB, rowA, rowB) {
@@ -1882,8 +1902,8 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
title: '{% trans "Allocated" %}',
sortable: true,
formatter: function(value, row) {
- var allocated = allocatedQuantity(row);
var required = requiredQuantity(row);
+ var allocated = row.consumable ? required : allocatedQuantity(row);
return makeProgressBar(allocated, required);
},
sorter: function(valA, valB, rowA, rowB) {
@@ -1922,6 +1942,11 @@ function loadBuildOutputAllocationTable(buildInfo, output, options={}) {
field: 'actions',
title: '{% trans "Actions" %}',
formatter: function(value, row) {
+
+ if (row.consumable) {
+ return `{% trans "Consumable item" %}`;
+ }
+
// Generate action buttons for this build output
var html = ``;
@@ -2077,6 +2102,11 @@ function allocateStockToBuild(build_id, part_id, bom_items, options={}) {
for (var idx = 0; idx < bom_items.length; idx++) {
var bom_item = bom_items[idx];
+ // Ignore "consumable" BOM items
+ if (bom_item.consumable) {
+ continue;
+ }
+
var required = bom_item.required || 0;
var allocated = bom_item.allocated || 0;
var remaining = required - allocated;
diff --git a/InvenTree/templates/js/translated/helpers.js b/InvenTree/templates/js/translated/helpers.js
index edd12a4ac5..2a62bca027 100644
--- a/InvenTree/templates/js/translated/helpers.js
+++ b/InvenTree/templates/js/translated/helpers.js
@@ -45,10 +45,11 @@ function deleteButton(url, text='{% trans "Delete" %}') {
*/
function shortenString(input_string, options={}) {
- var max_length = options.max_length || 100;
+ // Maximum length can be provided via options argument, or via a user-configurable setting
+ var max_length = options.max_length || user_settings.TABLE_STRING_MAX_LENGTH;
- if (input_string == null) {
- return null;
+ if (!max_length || !input_string) {
+ return input_string;
}
input_string = input_string.toString();
diff --git a/InvenTree/templates/js/translated/part.js b/InvenTree/templates/js/translated/part.js
index b3c291b98a..fbc07bdd09 100644
--- a/InvenTree/templates/js/translated/part.js
+++ b/InvenTree/templates/js/translated/part.js
@@ -803,7 +803,7 @@ function loadSimplePartTable(table, url, options={}) {
}
-function loadPartParameterTable(table, url, options) {
+function loadPartParameterTable(table, options) {
var params = options.params || {};
@@ -819,7 +819,7 @@ function loadPartParameterTable(table, url, options) {
setupFilterList('part-parameters', $(table), filterTarget);
$(table).inventreeTable({
- url: url,
+ url: '{% url "api-part-parameter-list" %}',
original: params,
queryParams: filters,
name: 'partparameters',
@@ -1292,13 +1292,12 @@ function loadParametricPartTable(table, options={}) {
},
columns: columns,
showColumns: true,
- // filterControl: true,
sidePagination: 'server',
idField: 'pk',
uniqueId: 'pk',
- onLoadSuccess: function() {
+ onLoadSuccess: function(response) {
- var data = $(table).bootstrapTable('getData');
+ var data = response.results;
for (var idx = 0; idx < data.length; idx++) {
var row = data[idx];
@@ -1309,7 +1308,7 @@ function loadParametricPartTable(table, options={}) {
row[`parameter_${parameter.template}`] = parameter.data;
});
- $(table).bootstrapTable('updateRow', pk, row);
+ $(table).bootstrapTable('updateByUniqueId', pk, row);
}
}
});
diff --git a/InvenTree/templates/js/translated/table_filters.js b/InvenTree/templates/js/translated/table_filters.js
index e817c17af8..62a5935e69 100644
--- a/InvenTree/templates/js/translated/table_filters.js
+++ b/InvenTree/templates/js/translated/table_filters.js
@@ -79,6 +79,14 @@ function getAvailableTableFilters(tableKey) {
type: 'bool',
title: '{% trans "Allow Variant Stock" %}',
},
+ optional: {
+ type: 'bool',
+ title: '{% trans "Optional" %}',
+ },
+ consumable: {
+ type: 'bool',
+ title: '{% trans "Consumable" %}',
+ },
};
}